【发布时间】:2014-06-06 00:05:06
【问题描述】:
假设这个写入模型有 4 个聚合:
应用程序需要阻止/禁止在 x 天间隔内访问商店超过 x 次的任何客户。
我应该把这个逻辑放在哪里?如果它应该在域层中,我应该为这个逻辑创建一个 ClientStoreVisitHistory 实体吗?或者我应该把这个逻辑放在域之外?
非常感谢任何帮助。
【问题讨论】:
-
客户为什么要光顾实体店?整个应用程序旨在解决什么业务问题?
-
@hippom 该模型只是显示我的问题所在的示例。无需考虑其他行为……我的主要问题是需要了解客户进行的所有 StoreVisits 的行为/逻辑,然后将该历史记录与商店的限制进行比较。这应该在域内还是在域外?用完整的访问历史填充聚合似乎不合适。这可以通过对持久化历史数据的简单查询来解决。
-
我认为该应用程序提供了一些服务,而不仅仅是限制访问。在这种情况下,至少有两个域,一个是针对核心业务关注点的核心域,另一个针对身份和访问。你上面的模型应该放在第二个。现在让我们回到您的问题:逻辑在作为核心域基础设施的身份和访问域中(因此它在核心域之外)。
-
实际上域中的所有内容都与客户端/商店实体相关联。我正在考虑这样做: StoreVisitLimitSpecification (1:1 with store) 在 store aggregate 内。 StoreRecentVisitActivity 实体聚合关联到 StoreVisitLimitSpecification 。在 StoreVisitLimitSpecification 内部检查访问是否生成阻止/禁止:如果进行 StoreVisit 的客户端已经在 StoreRecentVisitActivity 中出现 x 次,则阻止他。你怎么看 ?附: : StoreRecentVisitActivity 将在 x 天限制期内保存一些访问的参考。
-
“阻止”是指拒绝访问(如http访问)还是只是逻辑约束?
标签: oop architecture uml domain-driven-design cqrs