初识MVC框架--Model与ViewModel

Model:领域模型,与数据库建模一一对应。ViewModel:用户视图模型,与View层用户操作直接关联。本文以软件开发平台中客户(Customer)为例进行说明。

一个简单的Model
Web开发框架中MVC架构,本来就只有一个Model的,这个Model在领域驱动开发中主要担任领域模型的角色,和业务逻辑紧密关联的,直接与数据库表进行映射的

/// 
    /// 物料
    /// 
    public partial class Inventory
    {
        /// 
        /// ID
        /// 
        public int InventoryID { get; set; }
        /// 
        /// 物料编码
        /// 
        [Required]
        public string Code { get; set; }
        /// 
        /// 是否启用
        /// 
        public bool IsEnabled { get; set; }
        /// 
        /// 创建时间
        /// 
        public DateTime? CreateAt { get; set; }
        /// 
        /// 创建人
        /// 
        public string CreateBy { get; set; }
        /// 
        /// 修改时间
        /// 
        public DateTime? ModifyAt { get; set; }
        /// 
        /// 修改人
        /// 
        public string ModifyBy { get; set; }
        /// 
        /// 从属于哪个系列ID
        /// 
        public int? SerialID { get; set; }
        /// 
        /// 系列模型
        /// 
        public InventorySerial InventorySerial { get; set; }
                    /// 
        /// 系列名称。
        /// 
        public string SerialName
        {
            get { return InventorySerial == null ? "" : InventorySerial.SerialName; }
        }
    }

模型里面有一个自增长的InventoryID,包含物料编号Code及属于哪个系列等属性,这些在数据库中物料表都有对应的字段,通过EntityFramework进行模型映射。

一个简单的ViewModel
但是在比较复杂的业务场景中,一个领域模型已经不能满足于开发这一场景,已经需要借助第二个模型,我们姑且叫做用户模型,即与用户直接打交道的视图模型(ViewModel)

 /// 
    /// 物料
    /// 
    public partial class Inventory
    {
        /// 
        /// ID
        /// 
        public int InventoryID { get; set; }
        /// 
        /// 物料编码
        /// 
        [Required]
        public string Code { get; set; }
        /// 
        /// 是否启用
        /// 
        public bool IsEnabled { get; set; }
        /// 
        /// 创建时间
        /// 
        public DateTime? CreateAt { get; set; }
        /// 
        /// 创建人
        /// 
        public string CreateBy { get; set; }
        /// 
        /// 修改时间
        /// 
        public DateTime? ModifyAt { get; set; }
        /// 
        /// 修改人
        /// 
        public string ModifyBy { get; set; }
        /// 
        /// 从属于哪个系列ID
        /// 
        public int? SerialID { get; set; }
        /// 
        /// 系列模型
        /// 
        public InventorySerial InventorySerial { get; set; }
                    /// 
        /// 系列名称。
        /// 
        public string SerialName
        {
            get { return InventorySerial == null ? "" : InventorySerial.SerialName; }
        }
    }

ViewModel顾名思义是应用于View层的(这和MVVM原理同,当然我们也可以在View层直接使用MVVM架构,这个不是我们讨论的范围,有兴趣的伙伴可以查看AngularJS相关知识。),在Controller层(或服务层)将Model转化为ViewModel后,再Reponse给View层进行数据绑定。

Model与ViewModel关联
Model和ViewModel的转化通过深拷贝来进行,两者除了数据复制外不要有任何关联,我们可以通过new模型实例进行相应属性值拷贝来转化,也可以通过automapper组件来傻瓜式转化。

直接写代码转化:
               //Customer customer   已经有值的对象
            
   CustomerViewModel customerViewModel =new CustomerViewModel 
    {
        /// 
        /// ID,视图中隐藏属性
        /// 
         CustomerID=customer.CustomerID,   
        /// 
        /// 客户编码
        /// 
       Code=customer.Code,
        /// 
        /// 客户名称
        /// 
        Name =customer.Name ,
        /// 
        /// 客户地址1
        /// 
        Address1 =customer.Address1,
        /// 
        /// 客户地址2
        /// 
         Address2 =customer.Address2;
        /// 
        /// 客户地址3
        /// 
         Address3 =customer.Address3 ,
        /// 
        /// 所在城市
        /// 
         City =customer.City
            AutoMapper傻瓜式转化:
            CustomerViewModel customerViewModel=customer.ToModel();

文章转载自:初识MVC框架–Model与ViewModel
web开发框架 – 云微平台
本文标题:初识MVC框架–Model与ViewModel
本文地址:http://www.hocode.com/

你可能感兴趣的:(后端)