<th id="v9g6b"><track id="v9g6b"></track></th>

  • <em id="v9g6b"><acronym id="v9g6b"></acronym></em>
    <progress id="v9g6b"><pre id="v9g6b"></pre></progress>
    <tbody id="v9g6b"></tbody>
    <button id="v9g6b"><acronym id="v9g6b"></acronym></button>
    <rp id="v9g6b"><ruby id="v9g6b"></ruby></rp>

        <dd id="v9g6b"></dd>

        <em id="v9g6b"></em>

          初识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();

          网站&系统开发技术学习交流群:463167176

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

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

          电话
          电话 18718672256

          扫一扫
          二维码
          本港台开奖 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>