正确设计骨料根

时间:2015-07-10 20:22:28

标签: domain-driven-design

在远处,远处的一个领域星系,提到

  • '测量值'和'位置'
  • 每个“测量值”来自/属于特定的“地方”
  • 每个'测量值'在指定日期和时间登记。时间和给定的特定类型(例如,水流,风等)
  • 每个“地方”都有一个名称和一系列已注册的“度量值”

鉴于我目前的模型,其中'Places'是包含'测量值'的聚合根,我有一个两难选择:

用户希望一次查看一种测量值,并且有很多测量值。 要仅在需要其中一些测量值时加载所有测量值似乎是不必要的..

EG。我坚持如何组织/模拟需求“在时间A和B之间显示河流X(地方)的水流量(测量值)”

是否允许实例化River X聚合根仅部分加载了给定用例中涉及的测量值类型? 是否有其他方法来建模测量值及其来源?

请让med知道你的想法......

3 个答案:

答案 0 :(得分:1)

我认为你的汇总是一致的。您的困境与领域模型无关,而不是与演示模型无关。

我将考虑在NoSQL实例中反序列化每个度量的可能性,这样您的presenteation层可以过滤并进行任何查询,而不会影响域层的一致性。

答案 1 :(得分:0)

如果我错了,请纠正我,但这听起来非常像数据模型和存储会影响您的系统设计?如果是这样的话,可能是你进退两难的原因。使用聚合的利益建模的关键部分是它没有依赖性。依赖关系,如数据库和数据模型。没有直接的观点'一个聚合,所以它不是由视图塑造的。这使得聚合更容易设计。他们更专注于解决问题。因此,他们非常适合做复杂的事情。

如果事实证明您不需要聚合来为您的域建模。然后,您可以专注于高效的存储和检索机制。

换句话说......

如果你不需要,不要把自己束缚在DDD的结上。

如果有帮助我创建了常见DDD错误的信息图。你会发现它很有用。你可以找到它here

顺便说一句,我认为DDD是一个很好的方式,但前提是你的域名需要保证。如果我误解你的话,可能会有误解。

答案 2 :(得分:0)

我没有看到真正的问题。您说每个Measurement都绑定到特定的Place,那么您不必加载所有Measurements

使用正确的数据层配置,您可以通过选择/加载/仅实例化它的父(Measurement)来加载所需的Place