首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将NHibernate集合筛选器用于DDD集合

将NHibernate集合筛选器用于DDD集合
EN

Stack Overflow用户
提问于 2009-10-12 08:52:05
回答 1查看 570关注 0票数 2

我正在尝试在NHibernate中映射一个域模型。域模型是用我认为是DDD风格实现的。映射主要起作用,但是当我尝试在a集合上使用集合过滤器时,我得到了一个异常,它说:该集合未被引用。

我知道问题来自于我实现集合的方式。我的问题是:是否可以在以这种方式实现的集合上使用nHibernate中的集合筛选器,或者我应该直接忘记它,即nHibernate不能使用它。

代码如下:

代码语言:javascript
复制
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); }
   }
}

主要的问题是我不想公开内部地址集合。我使用字段。interacts下划线访问,这样nHibernate就可以直接与该字段交互。我一直在阅读Hibernate in Action这本书,现在我在第7章中讨论了集合过滤器。

有没有办法解决这个问题。我通过如下方式公开内部集合,使其正常工作:

代码语言:javascript
复制
public ReadOnlyCollection<Address> Addresses 
{ 
   get { return _addresses; }
}

但我真的不想这么做。

如果能帮上忙,我会很感激的。

吉德

EN

回答 1

Stack Overflow用户

发布于 2011-03-13 07:17:31

如果我没记错的话,- sql在NHibernate查询中作为附加子句来减少从数据库返回的行数。

我的问题是--你为什么需要它?

我是说-一个人可能有多少个地址? 1? 5? 10?

关于集合隔离...

我自己只是接受它作为对NHibernate的牺牲(就像无参数的ctor和“虚拟的”),并且到处使用公开的IList (带有私有setter),只是为了减少技术复杂性。他们的内容肯定可以从外部修改,但我就是不这么做。

保持代码易于理解比让代码超级安全更重要。安全将随之而来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1553443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档