我正在尝试在开发新系统时使用DDD。在这个系统中我有地方,我需要根据您所属的广告组来访问地点。我还需要从广告组列表中获取允许的地点列表。
我想出了以下内容:
interface IPlaceRepository
{
Places[] GetPlacesForGroups(AdGroup[] adGroups);
}
class AdGroup()
{
string Name { get; private set; }
}
class Place
{
string Name { get; private set; }
}
现在我需要添加一个授予组访问权限的函数。根据DDD,这是正确的方法吗?我有两个建议。 我假设广告组可以被视为值对象。
void GiveAccessTo(AdGroup adGroup) { ... }
并向IPlaceRepository添加一个函数。
void AddGroupToPlace(Place p, Group g) { ... }
然后我需要将IPlaceRepository注入Place以便在GiveAccessTo中使用。
void GiveAccessToPlace(AdGroup g, Place p)
与选项1一样,我需要在IPlaceRepository上实现一个方法,并将存储库注入服务。
这是DDD的方法吗?
答案 0 :(得分:4)
存储库会保留完整的聚合,通常您没有AddGroupToPlace
方法。
由于ADGroup
是值对象,因此您可以使用GiveAccessTo
方法将组添加到Place
聚合。完成此操作后,您将使用存储库来保留完整的Place
聚合。
当操作跨越多个聚合时,主要使用服务。尽管如此,通常可以避免这种情况。
答案 1 :(得分:0)
(间接答案)
不确定DDD是否有专门针对您案例的规则。我会按照以下步骤操作: