asp.net-mvc - 将 "domain services"放在域模型项目中的位置

我一直在使用 S#arp Architecture但这可能适用于任何 DDD 架构(域/核心、应用程序服务、基础架构和表示)。

有许多 ASP.NET MVC 示例显示 Controller 通过存储库接口(interface)在域模型上运行。事实上,S#arp Architecture tutorial有 StaffMembersController 引用 IStaffMemberRepository,它调用 FindAllMatching(在存储库中实现)。同样在域/核心层中的 StaffMember 实体看起来像一个具有属性和对属性进行最少验证的数据包。

假设您有一个 Controller ,它被看起来像业务问题的事情变得臃肿。看完微软的"Designing Business Entities"在 Microsoft 的应用程序架构指南的章节中,我认为这些问题可以称为“域服务”。

我想将这些领域服务放在领域/核心层,但我不确定它们应该放在哪里。我是否应该在域/核心项目中创建一个服务文件夹,该文件夹托管接口(interface),下面有一个实现文件夹?这似乎是个好方法,但我想看看其他人是如何处理这个问题的。

谢谢!

最佳答案

您在问题中所说的领域服务就是我所说的应用程序服务。对三种不同类型的服务(应用程序、域和基础设施)的这种混淆导致了“任务”一词在谁能帮助我? (而不是应用程序服务)。

从广义上讲,我将域服务视为域内不属于任何单个实体的 Action /行为 - 这与 Evans DDD 书中描述的差不多。应用程序服务更像是域上的编排层/外观,它允许应用程序与域交互,而无需了解有关其工作方式的全部细节。

所以我相信您需要一个应用程序服务层来消除 Controller 的膨胀。这是 WCHM 中展示的方法,也是我现在在我的应用程序中遵循的方法。

就他们应该住在哪里而言 - 我会发邮件说你应该让他们在他们自己的项目中。如果您是纯粹主义者,合约也应该存在于它们自己的程序集中,这意味着如果您愿意,您可以从 Controller 中删除域的所有知识。但是,WCHM 方法将契约(Contract)放在域项目中,并允许 Controller 了解实体。有些人对此表示提示,但这基本上只是一种妥协。

希望对你有帮助 乔恩

关于asp.net-mvc - 将 "domain services"放在域模型项目中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3636389/

相关文章:

php - 加入 str_replace 与 strtolower

ruby-on-rails - 如果给定的工厂存在,我可以问 Factory Girl 吗?

ruby - 为什么 '\n' 不起作用,$/是什么意思?

c# - 无法对 SQL Server Express 2008 使用 SQL Server 身份验

django - 如果为空,请提供默认个人资料图片

python - 何时使用 * 和 ** 作为 python 函数中的函数参数

php - 检查字符串是否为哈希

php - 阈值在php代码中是什么意思

php - xdebug 安装不工作

reporting-services - SSRS - 有没有办法将日期/时间输入参数限制为仅限日期