值对象和外部库

时间:2015-10-02 15:33:55

标签: php domain-driven-design

我们正在使用DDD构建我们的应用程序。

我们正在编写我们的域层,在许多情况下,我们需要一个类型,例如Money,不属于我们域的一部分,它不仅仅是一个实体的类型,在该语言中不存在( PHP)。

我们不想浪费时间来创建和重新创建已经存在的库。

我几乎可以肯定,处理Money和我们使用哪个库的决定不应该对我们的域有影响,只是因为它是一个实现问题。

  1. 我们可以在域名下使用外部库吗?
  2. 我们可以为ValueObject定义一个接口吗?
  3. 我们应该把钱放在我们的域名下吗?它不是会计软件,它只是我们需要使用的原始类型,但对我们来说真的不重要。我们为什么要保留在域名下?
  4. 保持域名清晰但解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

回答你的问题:

  1. 是的,你可以。但您必须明白,此库将成为您域的一部分。因此它必须适合您的特定领域(例如,如果库有100500个类,而您只需要其中一个 - 它在库中使用时效果不佳)。通常 - 你可以做到。
  2. 我不认为,这对价值客体来说是个好主意。如果你需要为它创建一个接口,这意味着它不适合你。对于这样简单的对象,Ir看起来像是过度架构。
  3. 它真的是域对象吗?也许它只是简单的#34;众所周知的"像intstring这样的课程。你可以把它放在一些infrastructure层。因此,系统的每个部分都可以使用它。我们在项目中这样做。我们移动了一些"全部应用程序"不会改变的类和类型"在一个model.infrastructure库中,这减少了图层之间的映射和转换。
  4. 但请注意,这个答案就DDD问题的答案而言primarily opinion-based,因为我不了解您的所有应用程序逻辑。

答案 1 :(得分:0)

  1. 是的,只要他们不直接执行I / O内容(文件系统/网络/数据库访问)并且不参考基础架构或I / O相关库。

  2. 是的,但为什么?

  3. 是的,这正是Value Objects的用途。电子商务域与邮件传递无关,但CustomerAddress是一个完全有效的VO。

  4. 您可能会遇到的问题是,根据您的域名,Money可能位于“域”层中,但位于另一个专门处理付款的Bounded Context中。但事情并非总是如此。