asp.net-mvc – MVC DDD:可以将存储库与控制器中的服务一起使用
大部分时间在服务代码中我会有这样的事情:
public SomeService : ISomeService { ISomeRepository someRepository; public Do(int id) { someRepository.Do(id); } } 所以这有点多余 所以我开始直接在控制器中使用存储库 这个可以吗 ?是否有一些架构正在这样做? 解决方法
我不同意这一点. 如果业务逻辑应该在哪里 – 在域模型中,那么在控制器中调用repo(或者更好 – 使用模型绑定器)来获取聚合根和调用方法对我来说似乎完全没问题. 当涉及太多技术细节时,应该使用应用程序服务,这会弄乱控制器.
我相信我们在这里谈论两件不同的事情.我怀疑你的’模型绑定器’意味着同时使用模型作为视图模型,并将UI中的更改值直接绑定到它(这本身并不是坏事,在某些情况下我会走这条路). 我的’模型绑定器’是一个实现’IModelBinder‘的类,它在构造函数中占用存储库(因为我们需要使用一些基本组合进行缓存,因此可以扩展)并在调用操作之前使用它来检索聚合根和用实域对象替换int id或Guid id或string slug或任何action参数.将它与输入视图模型参数相结合,可以让我们编写更少的代码.像这样的东西: public ActionResult ChangeCustomerAddress (Customer c,ChangeCustomerAddressInput inp){ c.ChangeCustomerAddress(inp.NewAddress); return RedirectToAction("Details",new{inp.Id}); } 在我的实际代码中,它有点复杂,因为它包含ModelState验证和一些可能从域模型内部抛出的异常处理(提取到Controller扩展方法中以便重用).但不多.到目前为止 – 最长的控制器动作是~10行长. 你可以看到工作实现(非常复杂和(对我来说)不必要的复杂)here.
正如你可以(希望)看到的那样,这种方法实际上几乎迫使我们转向task based app而不是基于CRUD的应用程序.
…并且有一个新的抽象层,它邀请我们将基础设施与域逻辑混合在一起并失去域模型的隔离.
我不确定我是否这样做过.我不认为我自己开悟了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何使用Eval在数据绑定控件中调用扩展方法
- asp.net-mvc-3 – AutoMapper线程问题(缺少类型映射配置或不
- asp.net-web-api – 角色提供者/成员?如何在asp.net web a
- Kendo UI ASP.NET MVC使用教学视频集锦(高清在线观看)
- asp.net-mvc – XmlMediaTypeFormatter无法编写ObjectQuery
- asp.net – ObjectCache的“Set”和“Add”有什么区别?
- ASP.NET MVC 3,如何做主题权限
- asp.net-core-mvc – MVC 6配置验证
- asp.net – 如何使我的硒测试不那么脆弱?
- asp.net – WebControl vs HtmlControl. Cos和专业人士在We
- asp.net-mvc – Route Constraint Isnt适用于ASP
- 使用Azure ACS时无法从Active Directory注销
- 事件(Event),绝大多数内存泄漏(Memory Leak)的
- ASP.Net Web API架构选择
- asp.net-mvc – 页面的ValidateRequest设置可以被
- asp.net-mvc – ASP.NET MVC单元测试 – 假存储库
- asp.net – 动态更改GridView项目模板
- asp.net-mvc – ASP.NET MVC – 查看多个模型
- asp.net – asp:Gridview&asp:表格生成bor
- asp.net-mvc-4 – 下划线字符串模型绑定器