圖在前
目前項目中可能出現的三種Model模式,對於我們現在開發的一個項目,我覺得使用DDD的思想來設計模型比較清晰,使用DDD的思想把模型model分成了如下三種:
下面是我微博中的截圖:
上面的圖中把模型分成了ViewModel,它與頁面相關,DomainModel,它與業務模塊相關,Model,它與數據庫相關,它是對數據表的一種映射,一般用XML來表示。
文字說明在后
下面我們來舉個例子,用認識一下這三個模型:
下面以用戶業務為例,來講一個這三種模型
UserDomainModel
public class UserDomainModel { [Required] [Display(Name = "用戶名")] public string UserName { get; set; } [Required] [DataType(DataType.EmailAddress)] [Display(Name = "電子郵件地址")] public string Email { get; set; } public int UserID { get; set; } public Common_Area Common_Area{get;set;} public User_Extension User_Extension{get;set;} }
而對於用戶業務它又有注冊,登陸,這需要不同的view來呈現,這時需要ViewModel
LoginModel和RegisterModel
public class LoginModel { [Required] [Display(Name = "用戶名")] public string UserName { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "密碼")] public string Password { get; set; } [Display(Name = "記住我?")] public bool RememberMe { get; set; } } public class RegisterModel { [Required] [Display(Name = "用戶名")] public string UserName { get; set; } [Required] [StringLength(100, ErrorMessage = "{0} 必須至少包含 {2} 個字符。", MinimumLength = 6)] [DataType(DataType.Password)] [Display(Name = "密碼")] public string Password { get; set; } [DataType(DataType.Password)] [Display(Name = "確認密碼")] [Compare("Password", ErrorMessage = "密碼和確認密碼不匹配。")] public string ConfirmPassword { get; set; } }
而這些數據如何與數據庫關聯,這會用到了model,即我們的表,對於用戶業務來說,它可以有user_info,user_Extesion,Common_area等model組成,而domain model是將這三張表進行組合,以user_info為主導,其它兩個表於輔助,形式一個整體,而這個
整體我們在DDD里叫它聚合,整理里的標識叫它聚合根,一般是一個Guid碼。