5
는 :NHibernate에 매핑 널 개체/I 대신 직원이 널 부서가시키는의 'UnassignedDepartment'개체가하고 싶은 특수 케이스 패턴
public class UnassignedDepartment : Department
{
public UnassignedDepartment() : base("not yet assigned") {
Id = -99; <-- just some Id that can be held constant, not be generated..
}
}
이 부서 클래스의 정적 편의 필드에서 액세스 할 수 : 나는 FNH의 자동 매핑의 혼합으로, 기본 엔티티로 S 번호의 rpArch의 프레임 워크를 사용하고
public class Department : Entity
{
public static readonly Department UNASSIGNED = new UnassignedDepartment();
....
}
, & 규칙을 무시합니다. 지속성의 관점에서 볼 때 '특별'ID를 사용하여 다른 부서와 함께 유지하는 것이 논리적 인 것처럼 보이지만 올바르게 수행하는 방법을 알지 못합니다. 제발 저를 계몽하십시오!
들으, Berryl
죄송합니다. 객체 모델에는 필요한 모든 논리가 있으며 잘 작동합니다. 내가 해결하려고 노력하고있는 지속성 (NHibernate/FNH) 매핑은 나에게 생각을주었습니다. 이것을 상속 문제로 생각하는 대신, 개체 상속을 평평하게하기 위해 적절한 저장소를 확장하고 이것을 단지 다른 부서로 간주해야한다고 생각합니다. 특별한 경우 (duh)가있는 것. 나는 그것을 내일 시험해보고 결과를 게시하거나 다른 질문을한다 :-). – Berryl
파울러 리팩터링 (Fowler Refactoring)에서 인용 한 바에 따르면 Electric Utility 회사가 알 수없는 ResidentialCustomer (고객이 집을 버린 것일 수도 있음)를 다루기위한 하나의 옵션은 Customer 속성을 문자 그대로 null로 만드는 것입니다. 그러나 Customer.CalculateBill을 호출 할 때 null 참조를 확인해야하므로 고객의 하위 클래스 인 객체를 다형성을 사용하고 모든 null 검사 (Null 객체)를 피하도록 만듭니다. 더 나아가 올바른 주소를 알고있는 점유자 서브 클래스를 만들고 누군가가 저당 잡힌 집을 가져 가서 일반 고객이 될 때 비용을 축적 할 수 있습니다. – Berryl
내 질문에 NHibernate를 사용하여 DB에이 매핑하는 방법입니다. 하나의 개념 (나는 이것이 Jamie가 가고있는 곳이라고 생각한다)은 객체 모델이 null을 Occupant 나 UnassignedDepartment로 취급하는 동안 pvt 필드에 액세스하기 위해 NHib를 사용하여 실제로 db를 null로 저장할 수있다. 그러나 그것은 당신이 참조 무결성을 잃는다는 것을 의미합니까? 게다가 그것은 당신을 하나의 특별한 경우로 제한 할 것입니다. 내가 볼 수있는 유일한 다른 옵션은 db가이 상수를 일정한 ID (즉, -1)와 함께 취급하도록하는 것이지만 편집 문제를 방지합니다. 이것은 내가 해결하고자하는 동기와 문제입니다. – Berryl