上个月,我问了一个previous question,关于实体是否应该访问存储库,虽然看起来大多数人认为他们不应该这样做,但我不得不承认对我来说很难得到说服。DDD - 从实体访问存储库,
我有,我真的想不出任何(合理)方式做逻辑没有在我的实体注入库的使用情况:
我们有一个Store
,这是一个分配Zone
(城市,地区,... - 用户定义)。 为了减少负责将商店添加到数据库的员工的工作量,并确保一致性,我们不要求他选择他想添加商店的区域。他只是缩放地图,点击确定商店位置,然后保存。然后,应用程序必须为此位置找到最相关的区域。
我现在拥有的是一样的东西:
class Store
{
protected Zone zone;
protected Point location;
protected ZoneRepository zoneRepository;
public void setLocation(Point location)
{
Zone matchingZone = this.zoneRepository.findByLocation(location);
if (matchingZone == null) {
throw new ApplicationException(
"The store location must be within a zone boundary");
}
this.location = location;
this.zone = matchingZone;
}
}
你有任何固体替代将支持普遍接受的观点是,这种设计本身不好?
确实有趣的方法,但这种翻译在哪里呢?另外,我忘了提及Location实际上也是Store实体的一部分,我编辑了我的代码以反映这一点。 – Benjamin
我已经添加了一些解释和示例。 – kstaruch
我非常喜欢你的方法,但是我有点担心与Store的合同,它基本上允许应用程序的任何层为它自己分配不匹配的位置和区域。如何强制**只有** StoreLocationHandler(唯一知道与区域匹配的位置的正确业务规则的StoreLocationHandler)可以调用'store.assignLocation()'?我最喜欢的方式是这个规则是在商店本身执行的,并且在应用程序的任何地方都不可能有违规行为。 – Benjamin