当在域模型中提交概念时,存在具有名称并且听起来像对象但与5个主DDD建筑之一的责任重叠的概念阻止命名该对象的最佳做法是什么,或者处理可能包含或可能不包含该名称或短语的设计?命名像ddd构建块(如存储库)的域对象
举一个更具体的例子,可以说我们正在设计一个DDD精神的时间跟踪应用程序,并遇到一些领域专家称之为“时间日志”的东西,该日志应该是持有冲头的日志并为所有员工提供相应的打卡时间。
有了这些信息,我最初的想法是,如果有一个名为TimeLog的类可以查询现有的时间条目,并且还可以保留新的或修改的时间日志条目,这样的类实际上扮演着DDD存储库的角色。为了简单起见,让我们假设在经过各种讨论和重构之后,我们得出结论:每次日志条目本质上都是自己的聚合根,因此需要相应的存储库。
现在我们只剩下两种命名我们的资源库为TimeLog的,这似乎更符合通用语言或的DDD概念行选项,我们可以把它叫做TimeLogEntryRepository这似乎符合更一般的惯例命名它们查询/保留的聚合根之后的存储库。我更倾向于使用TimeLog的想法,因为它更多地描述了它在域模型中扮演的实际角色,这反过来又有助于将设计传达给域专家。另一方面,使用TimeLogEntryRepository的选择遵循现有的DDD约定,因此会使开发人员更易于遵循设计。妥协也可能与TimeLog命名一致,但要让所有存储库实现IRepository接口或从公共Repository基类继承,以帮助开发人员定位和区分构成域模型的其他人的存储库类。我使用基类时主要关心的是,它可能会鼓励使用标记接口或弱的不必要的基类,只是为了组织目的而不是因为行为因素。
这种情况下的最佳做法是什么?我可以看到服务可能发生的相同类型的问题,因为它们是开发人员通常使用诸如SomeComplexActivityService中的“服务”后缀命名的另一块典型的DDD构建块,但对于实体和值对象而言,这实际上是非问题。我特别感兴趣的是看看其他人可能不得不说,他们有更多的DDD经验。
我在想注册服务商或注册机构这个词可能更有意义,但在转向googlefight.com后,我很惊讶地看到注册人大幅度地获取了该蛋糕。 http://googlefight.com/index.php?lang=en_GB&word1=registrar&word2=registrator – jpierson 2011-05-03 14:26:19
+1,我读过你链接的文章,结果证明它们为存储库本身提供了一个整洁流畅的界面,它非常整洁。不知道我是否想把事情做得很远,但我可以看到它有哪些好处。 – jpierson 2011-05-16 21:13:25