謝謝你的任何想法。MVC體系結構和自定義membershipProvider
我想了解有關MVC體系結構的知識,並且正在研究一個小項目,這個項目與我學習該工具的程度相比要低於項目的要求。
我需要弄清楚什麼是良好的,可接受的和不良的做法,以及爲什麼。我完全明白,沒有具體的正確答案,但必須有適合任何良好 - >可怕範圍的架構。儘管從某種意義上說,不止一個問題,但我希望良好設計實踐的邏輯流程意味着它們都與一個封裝答案有關。
我米使用Code First Membership provider由達科佩奇尼克
用戶實現一個接口IUSER其中隱藏許多性能如主鍵和密碼,這應被訪問/經由屬於成員類中的方法改變的。它還使用一個getter和setter方法通過字符串而不是User.Roles收集的數組:
public virtual String[] RoleNames
{
set
{
this.Roles = (ICollection<Role>)value.Select(r =>
new Role { RoleName = r }).ToList();
問題1)我懷疑這個屬性可能是不好的做法,但究竟爲什麼我不確定。作爲方法GetRoleNames和SetRoleNames,這些會更好嗎?或者Icollection本身會更好地包含在IUser接口中嗎?
存在兩個使用AutoMapper從IUser映射的獨立視圖模型。這些模型涉及用戶是否正在註冊/更新自己的詳細信息,或者由網站管理員註冊/更新。
one viewModel包含一個用於角色和部門的IEnumerable。這些特性,目前正在通過automapper映射:
internal class RoleStringArrayToSelectListResolver
: ValueResolver<String[], IEnumerable<SelectListItem>>
{
protected override IEnumerable<SelectListItem> ResolveCore(String[] source)
{
return Roles.GetAllRoles().Select(x => new SelectListItem
{
Value = x,
Text = StringExtensions.ToSeparatedWords(x),
Selected = source.Contains(x)
問題2)是autoMapper把這樣的邏輯可以接受的地方,如果它不應該在哪裏去了?
問題3.)回發後,通過存儲庫方法createUser和updateUser驗證業務邏輯。對於這些方法來說,接受一個IUser實例作爲參數還是最佳的,或者更適合接受各種viewModels作爲參數的一些重載,以及爲什麼?
非常感謝您的任何想法的想法和幫助我的理解。
謝謝你 - 你完整的答案在我的編程理論的理解幫助很大。 – Brent 2012-08-03 10:31:36