域驱动设计中多个表的单个存储库与多个存储库

时间:2018-11-27 04:43:33

标签: oop domain-driven-design repository-pattern solid-principles

我有两个表来获取标准订户与高级订户的计费率,即StandardRate与PremiumRates。这些值由产品经理填充。

通过ORM(即StandardRateOrm和PremiumRateOrm)控制表访问。我正在尝试设计一个可访问ORM并根据某些条件检索费率的存储库。例如,用户的邮政编码范围。

我无法具体设计是否需要两个存储库类还是一个存储库类。

选项1: 我知道存储库在DDD中隐藏了存储层,因此只有一个名为RateRepository的存储库足以访问两个ORM并返回结果。目前,结果是值对象,因为它是只读访问。

选项2: 但是,在考虑SOLID原则(https://en.wikipedia.org/wiki/SOLID)时。创建一个名为RateRepository的父类和两个子存储库类(StandardRateRepository和PremiumRateRepository)是有意义的,这两个子存储库类分别访问其对应的ORM,因为它遵循:

  1. 单一责任:存储库只有一个理由 更改。
  2. 打开/关闭
  3. 界面隔离

使用选项1时,感觉界面不干净,也不符合SOLID原则。使用选项2,感觉就像是在域层中公开存储详细信息。

是否有已知的设计模式/规则来解决此问题?

1 个答案:

答案 0 :(得分:2)

不看域实体图就很难给出一个好的答案。

通常,比率将是值对象,因为比率通常由其值而不是标识来定义。例如:任何美金都是美金。仅仅因为费率可以保持不变,并不一定意味着它们需要一个存储库。存储库通常用于处理聚合根实体。

即使在您的域中费率是实体,也应使用功能强大的ORM或自定义数据映射器从对象模型中提取数据库详细信息(不同费率的单独表)。