asp.net-mvc – 提供DDD,但需要一些其优点
我放弃传统的DDD,这往往是一个巨大的时间,并强迫我做无尽的映射:数据层<域层<表示层。 即使是一个小的变化,我必须改变数据模型,域模型,演示模型/视图模型,然后存储库,管理器/服务类,当然还有AutoMapper映射,然后测试整个事情!每个呼叫都需要调用一个调用一个调用底层代码的层的层。除了“你以后可能需要”之外,我没有得到任何回报。咩。 我目前的做法更务实:
>我不用担心“数据层”和“域层”之间的差异,因为没有意义 – 这些术语是可以互换的。我让EF做它的事情,并在需要的时候添加界面和存储库。 >我已将我的“数据”和“域”项目合并(“核心”,无聊的名称,我知道),我几乎可以发誓Visual Studio实际运行更快。 >我允许EF实体上下栈,但是我仍然像往常一样将它们映射到演示模型/视图模型。 >对于简单的操作,我直接从控制器调用存储库,对于复杂的操作,我照常使用域管理器/服务;存储库从不暴露IQueryable。 >我将实体/ POCO定义为部分类,因此我可以在相应的部分类中单独添加域行为。 问题:我现在使用这些实体,所以客户端代码可以看到他们的导航属性。模型在他们离开存储库后总是实现的,所以这些导航属性通常是空的。 可能的解决方案: 我不习惯这种快速和松散的编程风格,所以也许我缺少一些明显的技巧。还有什么我应该考虑的吗?我确定还有其他问题我很快会遇到。 编辑: 解决方法
使用DDD的典型持久化方法是将域模型直接映射到相应的表。在技??术上,映射仍然存在(通常在代码中声明),但是没有明确的数据模型,如lazyberezovsky所指出的。
导航属性的问题可以通过几种不同的方式解决,无论您是否使用DDD。我不喜欢方法1,因为它使得更难理解你的代码 – 你永远不知道哪些属性将被设置,哪些不会。方法2在理论上要好得多,因为它使得它非常明确地表明给定的查询需要什么,使事情明确是一个很好的做法。类似但是更简单和不那么脆弱的方法是使用read-models,它只是被设计为满足给定查询集的要求的对象。在DDD的背景下,它们允许您将行为丰富的实体与查询分离,这些查询通常是不对的。现在DRY的支持者可能会尖叫异端,用火把和干草叉给你,但在实践中,维护一个阅读模型和一个实体往往要容易得多,以便通过接口或复杂的映射来强制实体来满足查询要求策略。另外,读取模型和行为模型的职责也是完全不同的,因此,DRY不适用。 这并不是说DDD适用于您的场景。避免完全成熟的DDD通常是一个明智的决定,特别是在大多数情况下为CRUD.您是正确的,谨慎,KISS and YAGNI的一个很好的例子。当您的域由复杂行为组成,而不仅仅是数据时,DDD会收获好处。无论如何,read-model模式都适用。 UPDATE 对于不使用读取模型的实现,请查看Fetching Strategy Design,其中提取策略的概念允许从数据库中精确地规定需要的内容,从而缓解导航属性的问题。在链接的帖子中引用的材料也是感兴趣的。总而言之,这试图避免其他方法中存在的一层间接问题。然而,在我看来,使用提出的提取策略比使用阅读模型更复杂,而净结果是相同的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何在Visual Studio 2010中设置Umbraco cms?
- asp.net-web-api – 从asp.net web api定制odata输出
- 在asp.net中使用eval(“”)
- ASP.NET Web Pages - 文件夹
- asp.net-mvc – URL中的Internet Explorer西里尔符号参数
- asp.net 大文件上传控件
- asp.net – 选择框更改事件中的setTimeout
- asp.net – OpenID Connect:验证用户ID令牌或访问令牌的正
- asp.net-mvc-4 – ASP.NET MVC 4 – 从Controller添加Bundl
- asp.net-mvc – asp.net mvc嵌套视图模型表单sumission
- .net – ELMAH对企业库异常处理块
- asp.net-mvc – Gzip压缩无法运行ASP.net MVC5
- asp.net上传文件到数据库的解决方案
- Asp.net 实现Session分布式储存(Redis,Mongodb,M
- asp.net-ajax – ScriptManager.RegisterClientS
- 从ASP.NET中的BarCode下面删除文本(C#)
- asp.net – 从Web API获取空的500 http状态代码
- asp.net-mvc – RouteCollection.Ignore和RouteC
- asp.net-mvc-3 – 无法加载文件或程序集“System
- asp.net – 将特定文件夹映射到web.config中的Ht