Repository pattern
,UoW pattern
の使用については多くの議論があります。私はいつ、そしてなぜRepository pattern
が使用されるのかをよく理解しています。 私はいくつかの集約の根を持っているとしましょう。次は何ですか?どのようなパターン/実装が好きですか?単純なNHibernate Sessionより複雑なソリューションを使用する理由は何ですか?リポジトリパターン、UoWパターン、プレーンHibernateセッション
ありがとうございます!
Repository pattern
,UoW pattern
の使用については多くの議論があります。私はいつ、そしてなぜRepository pattern
が使用されるのかをよく理解しています。 私はいくつかの集約の根を持っているとしましょう。次は何ですか?どのようなパターン/実装が好きですか?単純なNHibernate Sessionより複雑なソリューションを使用する理由は何ですか?リポジトリパターン、UoWパターン、プレーンHibernateセッション
ありがとうございます!
リポジトリパターンは不要ではない-imho-れる抽象化です。これにより、システム全体で複数回使用できる特定のクエリを事前定義することができ、読みやすさが向上します。
リポジトリは作業単位(NHibernateのISession
によって既に実装されています)を使用します。それは私の視点です。
私は何をしますか、あなたのプロジェクトのNHibernateのセッションにいくつかの拡張メソッドを作成しています。これは次のようになります。
public class ISessionExtensions
{
public static IEmployeeRepository GetEmployeeRepository(this ISession session)
{
return new EmployeeRepository(session);
}
}
public class EmployeeRepository()
{
internal EmployeeRepository(ISession s)
{
}
public IEnumerable<Employee> GetEmployeesFromDepartment(Department d)
{
...
}
}
次に、あなたのコードでは、あなたがこれを行うことができます:
using(ISession s = _sessionFactory.OpenSession())
{
var repository = s.GetEmployeeRepository();
...
}
リポジトリパターンはNHibernateより前です。今では、ほとんどの場合、不要な抽象化であるNHibernateの上にリポジトリパターンを適用します。 NHibernate上の抽象レイヤーとしてのジェネリックリポジトリの背後にあるアイデアは、ある時点でEntity Frameworkのような他の永続化メカニズムに切り替えることができるということです。本当に?それは可能ですか?私はキャッシング、フェッチなどのような多くのNHの仕様で終わるので、私は思っていません。私にとっては、プレーンなセッションの使用はOKです。
Here ayende talks about that for a while
興味深いです。しかし、それはあなたのアプリのサイズが合理的であれば、nhibernateセッションの拡張を実際に生成します。読みやすさのためにはどうですか? Nhsessionは神のクラスになる? – Hace
多くの拡張機能を生成するのはなぜですか?合理的なサイズのシステムであっても、拡張メソッドの数はそれほど大きくないと思います。その次に、拡張メソッドが複雑であるということではありません。私は、彼らが、すでにそれよりも、エスセッションをより神のクラスにするとは思わない。 –
私は、すべてのリポジトリの拡張子をすべてのルート集合体として作成するつもりだと思っていました。 Isessionを言った+1はすでに神のクラスです;-) – Hace