【问题标题】:Should I split these services into their own module?我应该将这些服务拆分为自己的模块吗?
【发布时间】:2015-12-14 20:56:36
【问题描述】:

我正在考虑将一个大型 ZF2 模块拆分为两个单独的模块,但我不确定如何处理服务层。

当前模块有一个服务层和一个域。领域对象紧密地模拟业务概念并包括与财务会计相关的子集。我正在考虑将这些会计对象转移到它们自己的模块中。

新的会计模块将定义 iAccountable、iLedgerSource、iStatementSource 等接口,这些接口将由现有“核心”域中的对象实现。

我的问题有两个:我是否应该担心“核心”域依赖于另一个模块?即会计模块? (我不这么认为,因为我看不出一个简单的方法)。

其次,我应该将服务层留在现有模块中,还是将其放入自己的模块中?即“服务”模块? (我想可能是后者)。

【问题讨论】:

  • 从您选择的 domain-driven-design 标签中:“请注意,概念性 DDD 问题最好在programmers.stackexchange.com 提出。”

标签: php oop domain-driven-design


【解决方案1】:

域模块&域接口模块

如果我理解正确,您将要创建一个“域接口”模块。虽然这并没有错,但我看不到为域模块设置 Separated Interface 的好处。

因此,您拥有的最干净的选择是将接口移动到域模块中。 注意,这要求你没有从域到其他模块的依赖关系。你应该将域模块放在你的层设计的“中心”,因为在 DDD 中,域是最软件的重要组成部分。

另请参阅Clean Architecture,了解支持 DDD 的架构。

服务模块

您绝对应该将服务模块与域模块分开。他们有不同的关注点:服务模块包含用例逻辑,领域模块包含领域逻辑。

例如,如果您需要一个新的应用程序接口(比如说一个 Web 服务),那么您只需为此创建一个新的服务模块 - 域模块可以被重用。

【讨论】:

  • 嗨 Dmi,我打算将域拆分为两个模块 - 一个“核心”和一个“会计”。核心模块将实现来自会计模块的接口。我会按照你的建议分离出服务层。
猜你喜欢
  • 1970-01-01
  • 2011-11-24
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多