初识MVC框架--Model与ViewModel

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

一个简单的Model

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

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

        /// <summary>
        /// 系列名称。
        /// </summary>
        public string SerialName
        {
            get { return InventorySerial == null ? "" : InventorySerial.SerialName; }
        }
    }

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

一个简单的ViewModel

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

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

        /// <summary>
        /// 系列名称。
        /// </summary>
        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 
    {
        /// <summary>
        /// ID,视图中隐藏属性
        /// </summary>
         CustomerID=customer.CustomerID,   
        /// <summary>
        /// 客户编码
        /// </summary>
       Code=customer.Code,
        /// <summary>
        /// 客户名称
        /// </summary>
        Name =customer.Name ,
        /// <summary>
        /// 客户地址1
        /// </summary>
        Address1 =customer.Address1,
        /// <summary>
        /// 客户地址2
        /// </summary>
         Address2 =customer.Address2;
        /// <summary>
        /// 客户地址3
        /// </summary>
         Address3 =customer.Address3 ,
        /// <summary>
        /// 所在城市
        /// </summary>
         City =customer.City

AutoMapper傻瓜式转化:

CustomerViewModel customerViewModel=customer.ToModel();

本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自:华晨软件-云微开发平台 » 初识Web框架--Model与ViewModel
本文标题:初识Web框架--Model与ViewModel
本文地址:https://www.hocode.com/OrgTec/back/0003.html

相关文章: 初识MVC框架--AutoMapper的应用 ¦

电话
电话 18718672256

微信
二维码