나는 일대일 관계가있다 (양방향이 아님). 여기서는 Resource가 많은 할당 집합을 암시하며, 아래에 표시된 것과 같다. 도메인은 AddAllocation, RemoveAllocation 등으로 할당을 관리하는 할당 수집에 더 많은 작업을해야합니다. 객체 관점에서 볼 때, 다른 클래스 인 AllocationCollection과 관련된 영구적 인 로직을 추가하고 싶습니다. 그 여분의 클래스를 NHib에 투명하게 만듭니다.nhibernate 커스텀 콜렉션 처리
또한 TDD 방식으로 AllocationCollection의 책임을 구체화하고 싶지만 기존 클래스를 리팩토링하는 방법을 잘 모르기 때문에 NHib가 여전히 잘 작동하므로 매핑이 현명합니다. 어떻게 그럴 수 있니?
건배, Berryl
모델
public class Resource {
public virtual ICollection<Allocation> Allocations
{
get { return _allocations ?? (_allocations = new HashSet<Allocation>()); }
private set { _allocations = value; } // Nhib will use this
}
}
매핑
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" ...
<class xmlns="urn:nhibernate-mapping-2.2" name="Domain.Model.Resources.Resource, ... table="Resources">
....
<set cascade="all-delete-orphan" name="Allocations">
<key foreign-key="Allocations_Resource_FK">
<column name="ResourceId" />
</key>
<one-to-many class="Model.Allocations.Allocation, ... />
</set>
빌리의 기사가 내가 찾고있는 기사였습니다! 콜린 잭 (colinjack.blogspot.com /.../ nhibernate-mapping-custom-collections.html)이 자신이 생각한대로 사용자 정의 컬렉션을 사용하는 솔루션을 제공하는 회신을 보았습니다.하지만 빌리의 솔루션은 quering에 대한 확장 방법은 지금 당장은 가장 침해 적이 지 않습니다. 감사! – Berryl
부모 클래스에서 컬렉션 유지 관리 (추가, 제거)를 유지하는 것에 동의합니다. 상위 클래스와 위반 SRP를 부풀리지 않고 도메인 내에서 수집 쿼리를 제어하는 문제입니다. 그리고 귀하의 링크 주소. – Berryl
나는 IEnumerable을 사용하고 집계 루트의 컬렉션에서 추가 및 제거하는 것에 거의 동의하지만 임시 컬렉션 (시간이 지남에 따라 변하는 것)의 경우 사용자 지정 임시 컬렉션이 매우 훌륭하다고 생각합니다. 나는 contract.Rate [new DateTime (2001,01,01)]과 같은 것을하는 것을 상상한다. contract 대신에 2001/01/01 시점에서 rate를 얻는다 .RateAsOf ... 나는 그것이있을 것이므로 좋을 것이라고 생각한다. 모든 클래스에서 각 "일시적인 속성 (ies)"에 대해 추가해야하는 많은 일시적인 동작입니다. – Loudenvier