2016-07-08 3 views
0

Fluent-NHibernateを使用してすべてのデータパーシスタンスレイヤを管理しており、全体的に非常に喜んでいます(NHibernateコミュニティに感謝しています)。私はORマッパーを使い続けるつもりです。私はマップされているPOCOの周りにAPIを開発しました。欠点は、すべてのプロパティがUI開発者によって取得可能であり、設定可能であることです。私が本当に望むのは、中間層ではない開発からプロパティを隠し、操作を実行するために提供されたAPIメソッドのみを表示することです。OR Mapperの使用中にプロパティセッターを非表示にする

誰にでもこのための戦略はありますか?

過度に単純な例:

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

公共セッターと公共事業の違いは何ですか?どちらも同じ結果をもたらします。たぶんあなたはあなたのタイプを代わりに_immutable_にしたいですか? – MickyD

+0

操作ではメソッドを意味しますか?あなたはプロパティの代わりにメソッドを使うことを提案していますか? – Juls

+0

はい。いいえ、それはあなたがコンストラクタにすべてを渡す場合は、不変の型が欲しいのように聞こえる。したがって、状態を変更するためのセッターやメソッドはありません。 – MickyD

答えて

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 

} 

またはいっその値オブジェクトを使用します(DDDにおける値オブジェクトの定義を参照)

public void SetName(Name name){ 

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

    } 
+0

ありがとうございます。あなたはこれがデータのプロパティを保護し、関数の使用を強制的に名前を設定することが正しいと思います。しかし、おそらく、私はこれを明確にしていないかもしれません。私はORマッパーFluent NHibernateを使用していますので、privateまたはno setterを持つとマッピングエラーが発生します。 – Juls

+0

NHでもう少し読むことができます。プライベートフィールドの列にマップすることができます。私はいつもそれをする。 – epitka

+0

すべてのクラスのコンビネーションとしても、ケースバイケースでも指定できます。 DefaultAccess.ReadOnlyPropertyThroughCamelCaseField(CamelCasePrefix.Underscore); – epitka

関連する問題