Den*_*nov 5 domain-driven-design domain-model cqrs
我发现很难决定某些东西应该是域名还是应用程序的一部分.
通过这个答案阅读有助于很多概念,如授权,但我仍然发现自己正在努力与其他事情.
为了说明我的困惑,请考虑发表评论的案例.以下是在发布评论之前需要执行的操作.我在括号中指出我认为这个功能应该去哪里.
我无法确定检查垃圾评论是否是域关注或应用程序,同样适用于限制.从我的观点来看,这些问题对我来说都很重要,必须存在.但同样适用于授权,我们知道它不应该在域中.
如果我在域服务和应用程序服务之间拆分这些问题,那么我觉得我的域名没有完全执行,实际上依赖于应用程序进行事先检查.在这种情况下,重点是什么,为什么我不应该在应用程序中全部完成以减少混淆?
我目前的设置是这样的:
Controller ->
App.CommentingService.Comment() ->
Domain.CommentingService.Comment()
如果有人可以通过所有必需的步骤来创建注释并将其分配到正确的层,从而给出一些推理,那将会很有帮助.
您的设置看起来正确。应用程序服务通常有两种类型:
应用功能:电子邮件通知、授权、持久化等。除了域名之外,您的系统的所有功能都在这里。
应用程序协调:为了满足用例,您需要协调应用程序功能和域。所有的管道都集中在这里。
请记住,应用程序协调模型用例并不总是匹配 1 个应用程序服务 = 1 个域服务,因为用例可能涉及 1 个以上的进程。
Controller
App.CommentingService.Comment() //coordination of below features and domain
App.AuthService().Autorize(); //feature
Domain.CommentingService.Comment(); //domain
App.PersistenceService().Persist(); //feature
App.NotificationService().SentNotificationToUser(); //feature
Run Code Online (Sandbox Code Playgroud)
为什么我不把这一切都放在应用程序中来减少混乱呢?
责任分离、松耦合、依赖注入等;所有这些都是有好处的,原因有很多。我将给你一个我最近参与的真实例子:拥有一个松散的组合程序集(它在 .NET 框架中),仅包含域服务,使我可以在 Web 应用程序、桌面应用程序和 SOAP Web 服务中托管相同的域而不受影响更改应用程序协调服务,因为每个应用程序的要求和用例都不同。
关于什么进入域,什么不进入域。很难给你一个直接的答案,因为这很大程度上取决于你的领域是否属于你的领域。
IE
确保用户在最后一分钟发表的评论不超过 5 条
你一定要问为什么要节流?为了防止用户界面混乱?性能原因?防止拒绝服务威胁?或者是否违反了“游戏”中的规则,因为您的“游戏”只是在时间垃圾邮件中向用户提供了有限的尝试?这表明某物是域或应用程序。
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |