asp.net-mvc – 提供DDD,但需要一些其优点
|
我放弃传统的DDD,这往往是一个巨大的时间,并强迫我做无尽的映射:数据层<域层<表示层。 即使是一个小的变化,我必须改变数据模型,域模型,演示模型/视图模型,然后存储库,管理器/服务类,当然还有AutoMapper映射,然后测试整个事情!每个呼叫都需要调用一个调用一个调用底层代码的层的层。除了“你以后可能需要”之外,我没有得到任何回报。咩。 我目前的做法更务实:
问题:我现在使用这些实体,所以客户端代码可以看到他们的导航属性。模型在他们离开存储库后总是实现的,所以这些导航属性通常是空的。 可能的解决方案: 我不习惯这种快速和松散的编程风格,所以也许我缺少一些明显的技巧。还有什么我应该考虑的吗?我确定还有其他问题我很快会遇到。 编辑: 解决方法使用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-mvc – 防止更改隐藏字段
- asp.net-mvc – git和ASP MVC
- asp.net-mvc – ASP.NET MVC:如何在localhost上自动禁用[R
- asp.net-mvc – 使用Data Annotation验证DateTime(日期和时
- asp.net – 成员资格生成密码仅字母数字密码?
- Asp.net从Https重定向到Http
- asp.net-mvc – 如何在ASP.NET MVC中执行[RequireHttps(Red
- asp.net – Visual Studio加载项自动附加到Development Ser
- .net – 强制ActionLinks呈现为小写
- asp.net-mvc – 在ASP.NET MVC DisplayFor Html Helper中为
- 如何在自动生成的列中隐藏ASP.NET GridView中的列
- asp.net-mvc – 如何持久保存用户选择(例如:主题
- Asp.Net 5分钟实现网页实时监控
- asp.net-mvc – 创建一个texarea帮助器,它将视图
- asp.net – 如何使Visual Studio在从代码页面击中
- asp.net-mvc-3 – html.dropdownlist MVC3混乱
- nuget – 在部署的asp.net mvc解决方案中需要pac
- asp.net – 如何发布站点从命令行与一些发布配置
- asp.net – 模型,ViewModels,MVC 3应用程序中的D
- asp.net-mvc – HttpContext和HttpContextWrappe
