NHibernateにインスパイアされた無限のDALリファクタリング煉獄の一部として、リポジトリパターンを使用して、UIレイヤーからNHibernateを腕の長さに保つようになりました。リポジトリからのLoadメソッドの例を次に示します。
public StoredWill Load(int id)
{
StoredWill storedWill;
using (ISession session = NHibernateSessionFactory.OpenSession())
{
storedWill = session.Load<StoredWill>(id);
}
return storedWill;
}
私のウェブサイトがISessionが何であるかを知らないという事実が大好きです。
当然、上記のメソッドはStoredWillをロードせず、プロキシを返すだけなので、遅延初期化の例外が発生し始めました。プロキシのプロパティにアクセスすると、ISessionのスコープ内にいる時間が長くなるため、例外が発生します。何が起こっているのか気づいたとき、私は大声で笑いました。
私はこれを次のように修正しました:
public StoredWill Load(int id)
{
StoredWill storedWill;
using (ISession session = NHibernateSessionFactory.OpenSession())
{
storedWill = session.Load<StoredWill>(id);
string iReallyCouldntCareLess = storedWill.TestatorLastName;
}
return storedWill;
}
しかし、それはすべて少しばかげているようです。もう少しエレガントなパターンを使用している人はいますか?
皆大好き。
デビッド