データベースに格納されている一部のデータにアクセスするWCFサービスを設計しています。
DBへの実際のアクセスは、いくつかのORMレイヤー(現在はNHibernateですが、これは実装の詳細です)によって処理されます。
この種のシナリオの適切な設計は何ですか?
素朴なアプローチは次のようになります。
public class ServiceImplementation : IService
{
// NHibernate session
private ISession session;
// service methods that use *session*
}
これは特にNHibernateに結合され、サービスクラスに初期化の管理とORMロジックコードの所有を強制します。
私の質問は特に:
- サービスがDB/ORMレイヤーから分離されている分離設計を実現するにはどうすればよいですか?
- いつ、誰がdb access / ORMレイヤーを初期化する必要がありますか?サービスはそれを管理していますか?
これは非常に一般的なシナリオであるため、いくつかの「パターン」/ベストプラクティスが存在すると思います。
オンラインで入手できるほとんどの例は、これを実現する方法(ORMを使用してDBにアクセスする方法など)を示していますが、設計の観点から、より大規模にこれを適切に行う方法は示していません。