Frage

Ich bin derzeit schreibe eine Finanzanwendung, und wir haben eine ziemlich Standard Kundentabelle. Es besteht aus vielen Pflichtfelder, und einige optional wie Cell / Fax etc .. Ich verwende NHibernate als ORM und haben alle Zuordnungen richtig. Es ist bereits funktioniert.

Ich frage mich nur, wie kann ich „Express“ in Code, dass ein Feld ohne Kommentierung nicht-null ist? Ich habe die hbm.xml Dateien, die dieses Dokument, aber es ist irgendwie peinlich, wie dies bei ihnen für Dinge zu suchen.

Das andere, was in den Sinn kommt, ist, dass ich will nicht das Repository zu NHibernate Ausnahmen bei meiner Logik werfen, vielleicht sollte ich die Validierung Route im Controller gehen. Trotzdem, wie kann ich den POCO-Code vornehmen Ausdruck bringt, dass einige Felder null sein können?

Klassendiagramm

Wie Sie sehen können, möchte ich Cellular und Fax haben, während Telefon obligatorisch optional sein. Sie sind alle nur Composite-Zuordnungen, so dass die Zuordnungsdatei gibt nur, dass die einzelnen Elemente jeweils auf nicht-null, aber ich hasse die Person.Cellular zu tun! = Null überprüfen die ganze Zeit eine Nullreferenceexception zu vermeiden ist.

War es hilfreich?

Lösung

Es gibt ein paar Möglichkeiten, um diese je nach POCO Verhalten zu tun und Codierung Stil. Erstens könnten Sie Nullable Types auszudrücken verwenden, die dieses Feld NULL-Werte zulässt und es wäre daher implizit sein, dass der Rest nicht NULL ist zulässig. Alternativ können Sie einen Telefonwerttyp als Typ für die Telefon-Eigenschaft des POCO stellen Ihnen dargestellt, was bedeutet, dass, weil es nicht ein primitiver Typ ist es „wichtiger“ ist - dies auch Ihnen ermöglichen würde, Telefonnummer Validierung innerhalb der Klasse zu kapseln selbst.

In meinem Kopf ein wahres POCO-Objekt zu sein, es nicht über die zugrunde liegende NULL-Zulässigkeit innerhalb der Datenbanktabelle zu kümmern braucht es in persited ist ... es soll eigentlich Validierung und Werttypen hat, die sein Verhalten als eigenständige Einheit ausdrücken ; also bevor es zu NHibernate bekommt, ist bereits in einem gültigen Zustand.

Andere Tipps

Machen notnull Eigenschaften Nur-Lese-und Schreib über einen öffentlichen Konstruktor zu ihnen. Machen Sie das Standard-Konstruktor geschützt oder privat.

public class DomainObject{
private string nnp;
protected DomainObject(){}
public DomainObject(string nnp){
this.nnp = nnp;
}
public string NotNullProp {get {return nnp;}}
public string NullableProp {get;set;} 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top