gpt4 book ai didi

architecture - DDD 架构 - 通用方法/助手的放置位置

转载 作者:行者123 更新时间:2023-12-04 00:50:04 26 4
gpt4 key购买 nike

根据this question在 Stack Overflow 上,在 DDD 架构中,“助手”类可以根据其用途位于不同的层中。例如,以用户友好的方式格式化某些内容的助手将进入 UI。数据库助手将进入基础设施。

但是可以被多个层使用的助手呢?例如年龄计算。业务逻辑的模型层可能需要年龄。它被多个实体使用,因此不应位于特定实体中。还有一些地方需要年龄只是为了在 UI 中显示。同样,我有多个层可以使用的字符串函数。例如,我的自定义 Right 和 Left 方法可用于 UI 中的格式化,但它们也可能用于模型中,例如基于前缀的条件逻辑。

那么这些常用的方法应该去哪里呢?我的设置是这样的:

  • 用户界面
  • 申请
  • 型号
  • 基础设施

  • 模型是核心,不依赖于基础设施,所以普通助手不能进入基础设施。我正在考虑两种选择:

    1) 有另一个层,称为 Common 或类似的层,任何层都可以使用。这将在 Model 和 Common 之间创建依赖关系。

    2) 在需要的任何层中复制辅助逻辑。例如,在 UI 中有一个 Age helper,在 Model 中有一个 Age helper。这将违反 DRY,但不需要域依赖于“公共(public)”层。

    哪个选项更好?模型层是否可以依赖“公共(public)”层?

    更新:

    自从提出这个问题以来的 2.5 年里,我得出的结论是:
  • 诸如 Right、Left 等补偿框架限制的东西属于“通用”实用程序/帮助组件,甚至模型/域层也依赖它。
  • “通用”实用程序/辅助组件不应该很大。随着更多的经验,我发现许多我认为是帮助者的东西实际上属于领域模型。
  • 年龄属于领域层中自己的类。就像地址、电话号码和金钱之类的东西一样,我认为这些东西是值(value)对象。理解值对象确实是我理解创建可以合并到其他类中的可重用域类的关键。
  • 最佳答案

    我认为字符串助手略有不同 - 在这种情况下,您的自定义 Right 和 Left 方法实际上是在补偿您的语言/平台的内置字符串类型的限制 - 它与您的应用程序没有任何关系所以在这种情况下,可以全局访问它是很好的。

    年龄计算示例更有趣一些,因为它封装了行为/逻辑,这在很大程度上是您的应用程序/域的固有部分。在这种情况下,可能值得根据具体情况评估是否值得在每一层中复制行为(违反 DRY 而支持 SRP)。这是一个艰难的决定。尽管它们现在可能是相同的,但通过复制行为,您可以让这两种方法在 future 有机会相互分歧。如果他们有 ,通常会发生这种情况。改变的不同原因 .

    关于architecture - DDD 架构 - 通用方法/助手的放置位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23886514/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com