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-mvc – 应用偏移量时表示的UTC时间必须介于0到10,0
- asp.net-mvc – 是否可以在每页捆绑脚本和样式
- asp.net-web-api2 – 创建新的IHttpActionResult动作结果方
- asp.net-mvc – 在使用WEB API时,如何从POST中提取HttpResp
- asp.net中js+jquery添加下拉框值和后台获取示例
- asp.net上传文件到数据库的解决方案
- 如何在ASP.NET MVC中创建CheckBoxListFor扩展方法?
- ASP.NET:压缩ViewState
- WF4 – 在asp.net中显示工作流图像,并突出显示活动
- 如何让asp.net不自动转换URL中的转义斜杠?
- asp.net-mvc – 保存为“BodyPart_3ded2bfb-40be
- iis-7 – localhost上的IIS非常慢
- asp.net核心 – ASP – 启动时核心迁移EF核心SQL
- asp-classic – 经典ASP SQL注入
- asp.net – 如何处理@RenderBody()?
- asp.net通过Ajax UpdatePanel回传后滚动条位置变
- asp.net – System.Web.Optimization是.NET Fram
- asp.net – IIS 7在一个服务器上引发web.config的
- asp.net – 当我试图强制401时,自定义授权过滤器
- asp.net-mvc – 使用Ninject重构依赖注入的ASP.N
