首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公共服务在哪里?

公共服务在哪里?
EN

Stack Overflow用户
提问于 2014-09-13 21:23:28
回答 2查看 777关注 0票数 3

在领域驱动方法中--在哪里保留公共服务?

例如,有时我们可能需要一些通用的函数,如getcountrylist、getstatelist、getcitylist (或母版表中的一些其他数据)来显示UI的不同页面/模块中的下拉列表。假设这些数据存在于数据库中,那么我们需要这些函数。

  1. 我是否可以将这些函数保存在域/Common/CommonServices.php中(我的意思是域层内部很好?)(或) 我是否可以将这些函数保存在Infra/CommonServices.php中(在本例中,我需要直接从Infraservice层连接到dao层,而我认为这是不正确的)?
  2. 包含这些公共函数的文件的正确名称/可建议名称是什么。(CommonServices.php (或) CommonHelper.php (或) CommonUtils.php (或) MetadataService.php (或)您的任何建议)
EN

回答 2

Stack Overflow用户

发布于 2014-09-13 21:44:43

如果您确实需要在不同的有界上下文中使用相同的数据,并且使用相同的存储库检索它们,那么在DDD中有一个叫做共享内核的东西。共享内核是在少数有限制的上下文中放置重叠的东西的地方,这是DDD Quick的引语

代码语言:javascript
复制
The purpose of the Shared Kernel is to reduce duplication, but still keep two separate
contexts. Development on a Shared Kernel needs a lot of care. Both teams may modify
the kernelcode, and they have to integrate the changes.
If the teams useseparate copies of the kernel code, they have to merge the codeas soon
as possible, at least weekly. A test suite should be inplace, so every change done to 
the kernel to be tested right away. Any change of the kernel should be communicated
to another team, and the teams should be informed, making them aware of the new
functionality.

无论如何,如果您的共享内核变得太大,那么您的建模可能会有问题。尽量保持共享内核尽可能小。

票数 4
EN

Stack Overflow用户

发布于 2014-09-15 12:16:34

这种行为与数据有关,所以我会将其放在一个特殊的存储库或中。您也可以使用域服务,但是Service是一个重载的术语,不能传递数据访问方面的信息。

如果采用CQRS方法,我建议将其放在单独的读取模块中。否则,您可以将接口保留在域层中,并在基础设施中实现,就像其他repos一样。

(编辑)为了使事情更清楚一点,这个外观可以由控制器直接调用,因为它只是只读访问,而不是操纵可能必须通过控制应用事务的应用层服务的聚合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25827853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档