FAQ:如何修改领域模型?
2024-10-18 02:22:11
问答部分
问:
如何修改领域模型?
答:
一般来说我们有两种选择,这两种选择也是两种价值观的体现(乐观和悲观)。
- 第一种:使用UI传递过来的DTO在应用层重建Domain Model,然后执行修改,DTO更多的表达了一种结果。
public class Application
{
public void Update(DTO dto)
{
var entity = this.AutoMap(dto); repository.Update(entity);
}
} - 第二种:使用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重建和从数据库重建,多数情况我们不能信任前者,而可以信任后者。
最新文章
- CSS基本知识4-CSS行模型
- atitit  验证码理论与概览与 验证码规范 解决方案.docx
- ExtJs、Struts2、Hibernate3.2登录页面的简单实现
- &;1的用法
- ios状态栏调整 简单动画的知识点
- “菜单”(menubar)和“工具栏”(toolbars)
- C语言-06复杂数据类型-01数组
- 安卓开发28:自定义View类
- 打开地图文件和shape文件代码加载Mxd文档
- Linux 使用 free 命令查看内存使用情况
- vue框架简介
- MFC超链接
- 在Ubuntu 14.04 64bit上安装百度云Linux客户端BCloud
- Daily Scrum - 12/04
- JAVA爬取百度贴吧图片
- Error: Cannot find a valid baseurl for repo: epel
- JavaScript高级程序设计(第3版)学习笔记·第8章——浏览器对象模型BOM
- 【安装】ES的安装过程
- [BZOJ4012][HNOI2015]开店(动态点分治,树链剖分)
- AC日记——围栏木桩 洛谷 P2362