2016-07-08 34 views
0

Ich verwende Fluent-NHibernate, um alle Datenpersistenz-Layer zu verwalten, und ich bin insgesamt sehr zufrieden (und dankbar für die NHibernate-Community). Ich plane weiterhin OR-Mapper zu verwenden. Ich habe eine API für die POCOs entwickelt, die gemappt werden. Der Nachteil ist, dass alle Eigenschaften von den UI-Entwicklern sowohl gettable als auch einstellbar sind; Wenn ich das wirklich möchte, dann verstecke ich Eigenschaften aus der nicht-mittleren Entwicklungsstufe und zeige nur die bereitgestellten API-Methoden, um Operationen durchzuführen.Verbergen von Eigenschaften-Settern bei Verwendung eines OR-Mappers

Hat jemand eine gute Strategie dafür?

Allzu einfaches Beispiel:

member.FName = "Julian"; /// Don't do this because it avoids the my checking 
member.LName = "King"; 


member.setName("Julian", "King"); /// Yes - this will throw an error if this person already exist 
+0

Was ist der Unterschied zwischen öffentlichen Setter und öffentlichen Operationen? Beide ergeben das gleiche Ergebnis. Vielleicht möchten Sie stattdessen Ihre Typen _immutable_ machen? – MickyD

+0

Mit Operation meinen Sie Methode? Schlägst du Methoden anstelle von Eigenschaften vor? – Juls

+0

Ja. Nein. Es klingt, als ob Sie unveränderliche Typen wollen. In diesem Fall würden Sie alles an einen Konstruktor übergeben. Somit würde es keine Setzer oder Methoden geben, um den Zustand zu ändern. – MickyD

Antwort

1
private string _fName; 
public string FName 
{ 
    get { return _fName;} 
} 

private string _lName; 
public string LName 
{ 
    get { return _lName;} 
} 

public void SetName(string fName, string lName){ 

    // check for nulls here and or validate pre-conditions 

    _fName = fName; 
    _ lName = lName; 

// check for post conditions here 

} 

oder besser noch Wertobjekt verwenden (siehe Definition von Wertobjekt in DDD)

public void SetName(Name name){ 

     _fName = name.FirstName; 
     _ lName = name.LastName; 

    } 
+0

Vielen Dank für die Antwort. Sie sind sicher, dass dies die Dateneigenschaften schützen und die Verwendung der Funktion erzwingen würde, um Name festzulegen. Aber vielleicht habe ich das nicht klar gemacht, ich benutze einen OR-Mapper Fluent NHibernate und so wird ein Mapping-Fehler ausgelöst, wenn man einen privaten oder keinen Setter hat. – Juls

+0

Vielleicht möchten Sie etwas mehr über NH lesen. Sie können privaten Feldern Spalten zuordnen. Das mache ich die ganze Zeit. – epitka

+0

Sie können es sogar als eine Konvetion für alle Klassen oder von Fall zu Fall Bassis angeben. DefaultAccess.ReadOnlyPropertyThroughCamelCaseField (CamelCasePrefix.Underscore); – epitka