これは概念的には私の質問hereに関連しています。しかし、私はNHibernateで遊んできた、と私の質問の真のコアが何であるかを実現しました。.NET ORMでコンストラクタが「正しく」使用されていますか?
古典的なオブジェクト指向設計では、データを適切にカプセル化するために、データメンバ(フィールド)に格納された値をオブジェクトのコンストラクタに渡すのが一般的なパターンです。 ではなくを変更する必要がある値は、アクセサ(読み取り専用プロパティ)のみで公開されます。変更が許可されているものには、アクセサとミューテータの両方があります(読み書き可能なプロパティ)。 適切な O/RMは、これらの規則を遵守し、オブジェクトを作成するときに利用可能なコンストラクタを使用する必要があります。読み書きプロパティ、リフレクション、またはその他のハック(IMHO)メソッドに依存することは間違っているようです。
これには.NET O/RMソリューションがありますか? Praveenさんのポイントに対処するために
EDIT
、私はコンストラクタを選択するための「デフォルト」のアルゴリズムを持っているプロジェクトがあることを知っている - のStructureMapは、例えば、常に最も引数を持つコンストラクタを使用して、ない限り、カスタム属性を持つコンストラクタにマークを付けます。私はこれが状況を処理する効果的な方法であることがわかります。おそらくIoCコンテナとに加えて、ORMは私が必要としている解決策を提供するでしょうが、これは本質的に悪いことではありませんが、ORMを使用するための不要な追加手順です。
もう1つ興味深い質問があります。コンストラクタにビジネスロジックが含まれていますか?私。クラスAのインスタンスを作成すると、そのコンストラクタは永続クラスBのインスタンスを作成し、それをプライベートセッターでプロパティに割り当てることができます。 –
@Alex:私の目標は、ドメインオブジェクトに永続性を知らないことです。ドメインオブジェクトからパーシステンスオブジェクトを作成するロジックを持つと、それに違反し、ドメインオブジェクトをパーシスタンスメソッド(別の悪いこと)にしっかりと結合します。 –