0
public MyClass(int someUniqueID)
{
    using(//Session logic)
    {
    var databaseVersionOfMyClass = session.CreateCriteria(/*criteria*/)
        .UniqueResult<MyClass>();

    //Load logic
    }
}

上記のコード サンプルは私の現在の方向性ですが、少し健全性チェックが必要なところまで来ました。

NHibernate (私はこの分野では緑です) では、クラス コンストラクター内でデータベースからオブジェクトをインスタンス化するのが一般的ですか、それともベスト プラクティスですか? 私が信じている別の方法は、データベースからオブジェクトを返す静的メソッドを持つことです。

また、コンストラクターとファクトリ メソッドに関する関連する質問に出くわしましたが、この実装がファクトリの方法論に適合するとは思いません。

上記に追加の質問を追加するために、コンストラクター内でのインスタンス化が進むべき道である場合、私は過去に常にある種の Load() メソッドを使用してきました。返された db オブジェクトのプロパティを新しいクラスに文字どおり一致させる特定のプライベート メソッド、またはプロパティ名が一致すると仮定する一般的なリフレクション メソッドを使用します。見逃したオブジェクトを「ロード」する別の方法があるかどうかに興味があります。

4

1 に答える 1

2

I do not like this approach. IMHO , it is better to implement some kind of repository which retrieves instances of persisted classes for you. As an alternative, you could also follow the ActiveRecord approach, where you could have a static 'Load' method inside your class, and an instance method 'Save' for instance. (Take a look at Castle ActiveRecord).

But, for me, I prefer the Repository approach.

于 2009-09-08T19:58:36.093 に答える