Ich mag würde ein Objekt ‚UnassignedDepartment‘ haben, anstatt dass die Mitarbeiter eine Null-Abteilung haben:NHibernate Mapping Null-Objekt/Sonderfall Muster
public class UnassignedDepartment : Department
{
public UnassignedDepartment() : base("not yet assigned") {
Id = -99; <-- just some Id that can be held constant, not be generated..
}
}
Dies ist durch eine statische Bequemlichkeit Feld in der Abteilung Klasse :
public class Department : Entity
{
public static readonly Department UNASSIGNED = new UnassignedDepartment();
....
}
I S # rpArch der Rahmen als Basis Entity bin mit, mit einer Mischung aus FNH Automapping, überschreibt & Konventionen. Vom Standpunkt der Beharrlichkeit scheint es logisch, dies bei den anderen Abteilungen mit einer "speziellen" ID zu halten, aber ich weiß nicht, wie ich das richtig machen soll. Bitte erleuchte mich!
Thx, Berryl
Sorry für nicht mehr klar. Das Objektmodell hat alle Logik, die ich brauche und funktioniert gut. Es ist die Persistenz (NHibernate/FNH) Zuordnung, die ich versuche zu lösen, die mir nur einen Gedanken gab. Anstatt dies als ein Vererbungsproblem zu betrachten, denke ich, dass ich nur das richtige Repository erweitern muss, um die Objektvererbung zu verflachen und sehe dies als eine andere Abteilung an; eine, die einen Spezialfall hat (duh). Ich werde das morgen versuchen und die Ergebnisse posten Oder eine andere Frage stellen :-). – Berryl
Paraphrasiert von Fowler Refactoring, eine Option für ein Electric Utility-Unternehmen mit einem unbekannten ResidentialCustomer (vielleicht verlassen sie das Haus, was auch immer) zu tun, ist die Customer-Eigenschaft buchstäblich null sein. Aber dann müssen Sie beim Aufruf von Customer.CalculateBill nach Nullreferenzen suchen, damit Sie ein Objekt, das eine Unterklasse von Customer ist, verwenden, um Polymorphismus zu verwenden und die Nullprüfung (Null-Objekt) zu vermeiden. Besser noch, machen Sie eine Occupant-Unterklasse, die die richtige Adresse kennt und die Kosten anhäufen kann, wenn jemand das abgeschottete Haus übernimmt und ein normaler Kunde wird. – Berryl
Meine Frage ist, wie dies in der DB mit NHibernate zugeordnet wird. Ein Konzept (ich denke, hier würde Jamie gehen) könnte sein, NHib zu verwenden, um auf ein pvt-Feld zuzugreifen und tatsächlich Null in der db zu speichern, während das Objektmodell null als Occupant oder in meinem Fall als UnassignedDepartment behandelt. Aber bedeutet das, dass Sie referentielle Integrität verlieren? Außerdem würde es Sie auf einen Spezialfall beschränken. Die einzige andere Option, die ich sehe, ist, dass die db auch dieses spezielle behandelt, mit einer konstanten ID (dh -1), aber dann haben Sie Probleme, die Änderungen daran zu verhindern. Dies ist die Motivation und das Problem, das ich zu lösen suche. – Berryl