问答部分

问:

如何修改领域模型?

答:

一般来说我们有两种选择,这两种选择也是两种价值观的体现(乐观和悲观)。

  1. 第一种:使用UI传递过来的DTO在应用层重建Domain Model,然后执行修改,DTO更多的表达了一种结果。

     public class Application
    {
    public void Update(DTO dto)
    {
    var entity = this.AutoMap(dto); repository.Update(entity);
    }
    }
  2. 第二种:使用Repository从Database中重建Domain Model,然后使用DTO携带的数据调用Domain Model,DTO更多的表达了一种目的。
     public class Application
    {
    public void Update(DTO dto)
    {
    var entity = repository.Load(dto.Id); entity.ChagneXXX(dto.XXX); repository.Update(entity);
    }
    }

备注

两种方式在处理乐观检查和合法性检查上也有所不同。

  • 在乐观检查方面:第一种涉及一次Load,乐观版本号的比较可以由ORM帮你完成,第二种涉及两次Load,要手工比较两次Load的版本号是否一致。上图没有画出第一次Load,要修改,UI必须要Load一次的。
  • 在合法性检查方面:第一种允许模型处于非法状态,仓储在持久化的时候负责检查,第二种不允许模型处于非法状态,模型自己负责保证这一要求。

如果采用了第一种,DTO和Domain Model可以使用一个类型,可以参考微软的示例:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

文中涉及两种重建:从UI重建和从数据库重建,多数情况我们不能信任前者,而可以信任后者。

最新文章

  1. CSS基本知识4-CSS行模型
  2. atitit  验证码理论与概览与 验证码规范 解决方案.docx
  3. ExtJs、Struts2、Hibernate3.2登录页面的简单实现
  4. &1的用法
  5. ios状态栏调整 简单动画的知识点
  6. “菜单”(menubar)和“工具栏”(toolbars)
  7. C语言-06复杂数据类型-01数组
  8. 安卓开发28:自定义View类
  9. 打开地图文件和shape文件代码加载Mxd文档
  10. Linux 使用 free 命令查看内存使用情况
  11. vue框架简介
  12. MFC超链接
  13. 在Ubuntu 14.04 64bit上安装百度云Linux客户端BCloud
  14. Daily Scrum - 12/04
  15. JAVA爬取百度贴吧图片
  16. Error: Cannot find a valid baseurl for repo: epel
  17. JavaScript高级程序设计(第3版)学习笔记·第8章——浏览器对象模型BOM
  18. 【安装】ES的安装过程
  19. [BZOJ4012][HNOI2015]开店(动态点分治,树链剖分)
  20. AC日记——围栏木桩 洛谷 P2362

热门文章

  1. Python+Selenium 自动化实现实例-实现文件下载
  2. AC日记——825G - Tree Queries
  3. Python基本语法[二]
  4. poj1562 Oil Deposits(DFS)
  5. php大图
  6. web学习测试环境
  7. python配置libsvm
  8. java getenv getProperties区别
  9. iOS 9音频应用播放音频之iOS 9音频播放进度
  10. Xcode_7_GM_seed.dmg下载