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); }
}
}
주요 문제는 내가 공개적으로 내부 주소 수집을 노출하지 않는 것이 다음과 같이
코드입니다. 다른 모든 것은 작동합니다. nHibernate가 필드와 직접 상호 작용할 수 있도록 field.camelcase-underscore 액세스를 사용합니다. 나는 Hibernate in Action 책을 통해 작업 해왔다. 이제는 7 장에서 컬렉션 필터를 다룰 것이다.
이 문제를 해결할 방법이 있습니까? 다음과 같이 내부 컬렉션을 노출하여 작동하도록했습니다.
public ReadOnlyCollection<Address> Addresses
{
get { return _addresses; }
}
하지만 실제로이 작업을 수행하고 싶지 않습니다.
도움말 정말 감사하겠습니다. JIDE
IList를 노출하는 경우 소비자가 직접 컬렉션을 수정하도록 어떻게 처리합니까? 필자가 잘 알고있는 것은 양방향 관계를 처리 할 수 있도록 도우미 메서드를 만드는 것이 가장 좋습니다. –
@ 마이크 나는 그것을 다루지 않는다. 그게 내가 희생으로 의미했던 것입니다. 나는 단지 그렇게하지 않는 대회를 만들고있다. 당신이 소비자에 대한 통제권을 가지고 있지 않다면 작동하지 않을 수도 있습니다. (저에게 쉬운 일입니다 - 제 프로젝트에 팀이 없어도 혼자였습니다). 양방향 관계를 처리하는 도우미 메서드로 무엇을 의미합니까? –
@Mike 어떻게 사생활 보호 컬렉션을 수정하고 반영하는 것이 좋을까요? :) –