我想在NHibernate中映射域模型。领域模型是用我认为是DDD风格实现的。该映射工程主要是但当我尝试在集合上使用集合筛选器时,我得到一个异常,它说:集合未被引用。使用NHibernate集合筛选器与DDD集合
我知道问题来自我如何实现集合。我的问题:是否可以在nHibernate中使用这种方式实现的集合中的收集过滤器,或者我应该忘记它,即nHibernate不能用于此。
的代码如下:
Person
{
IList<Address> _addresses = new List<Address>();
public string FirstName {get; set;}
...
public void addAddress(Address address)
{
// ... do some checks or validation
_addresses.Add(address);
}
public void removeAddress(Address address) {...}
public ReadOnlyCollection<Address> Addresses
{
get { return new ReadOnlyCollection<Address>(_addresses); }
}
}
的主要问题是,我不想公开暴露内部地址的集合。 其他的东西都可以工作,我使用field.camelcase-underscore访问,所以nHibernate直接与该领域进行交互。我一直在研究Hibernate in Action书,现在我在第7章介绍收集过滤器。
有没有办法解决这个问题。我已经通过揭露这样的内部集合工作:
public ReadOnlyCollection<Address> Addresses
{
get { return _addresses; }
}
但我真的不想这样做。
帮助真的很感激。
积德
如果您公开IList,您如何处理直接修改集合的消费者?我的理解是,最好的做法是创建一个辅助方法来执行此操作,以便处理双向关系。 – 2011-03-13 00:16:02
@Mike我不处理。这就是我牺牲的意思。我只是在约定不这样做。如果你对消费者没有控制权,可能无法工作(对我来说容易 - 我的项目中甚至没有团队,我一个人也没有)。你用辅助方法处理双向关系是什么意思? – 2011-03-13 00:22:06
@Mike你会如何处理与反射和修改私人收藏混乱? :) – 2011-03-13 00:24:32