【发布时间】:2014-06-24 15:24:10
【问题描述】:
我正在努力寻找以下问题的最佳解决方案。我需要确定某个国家/地区是否为“InUse”(例如当前由地址引用)。
我在 NHibernate 中映射了以下简化模型:
class Address
{
public Country Country {get; set;}
}
class Country
{
public List<Address> Addresses {get; set;}
bool IsInUse()
{
return Addresses.Any();
}
}
对 Country 使用 IsInUse 方法效率低下,因为它会导致所有国家/地区的负载(.Any() 在内存中执行)。此外, Country 并不需要真正了解 Addresses,它纯粹是为 IsInUse 方法而存在的。所以,从消费者的角度来看,我喜欢上面的例子,感觉域对象应该暴露一个 IsInUse 方法,但它不会执行并且包含不必要的关系。
我能想到的其他选择是;
- 只需使用存储库并直接从服务层调用它。存储库可以封装仅发出 SELECT COUNT(*) 的调用,而不是 SELECT *,就像上面的延迟加载选项一样。此选项将 IsInUse 逻辑完全置于域层之外。
- 将存储库注入 IsInUse(),调用与上述相同。我读到这是非常糟糕的 DDD 实践。
有没有人对此问题有任何建议或更好的解决方案。
希望以上内容有意义...谢谢。
【问题讨论】:
标签: domain-driven-design repository-pattern