私はNHibernateを学んでおり、いくつかの単体テストを作成しています。ドメイン(ビジネスロジックとデータアクセスを持っている) プレゼンテーションレイヤはNHibernateでセッションを作成する必要がありますか?
- プレゼンテーション(WPFアプリ)
- もちろん、私は私のユニットテストプロジェクト(テスト)を持っている:私のメインアプリは唯一の2つの層を有しています。
私の単体テストはクラスを呼び出して、
[TestFixtureSetup]
の間にSessionFactory
を構築します。各[Test]
はSession
となり、データアクセスユニットテストが実行されます。 WPFプロジェクトでこれをどうやってやるべきだろうと思っています。単純なダイアログボックスを作成して、自分のWPFアプリケーションをデータベースに接続できるかどうかを確認しました。プレゼンテーションレイヤーでNHibernateへの参照を持つのは間違っていると感じます。その場合、ユーザーが何かを保存するために自分のフォームの
Add
をクリックしたときに、オブジェクトを保存するセッションを取得するにはどうすればよいですか?私はこの種のものを持っている私のテストプロジェクトでpublic class SessionManager { private ISessionFactory _sessionFactory; public SessionManager() { _sessionFactory = GetSessionFactory(); } public ISession GetSession() { return _sessionFactory.OpenSession(); } private ISessionFactory GetSessionFactory() { return (new Configuration()).Configure().BuildSessionFactory(); } }
:ここに私のコードの一部です
[TestFixtureSetUp] public void TestFixtureSetup() { log4net.Config.XmlConfigurator.Configure(); DatabaseFixtureSetUp(); _sessionManager = new SessionManager(); } [SetUp] public void Setup() { DatabaseSetUp(); _session = _sessionManager.GetSession(); }
私はオブジェクトを格納するために私のプレゼンテーション層のコードを構造化するかどうかはわかりません。私は私のフォームにこれを持っています:
private void btnAddBroker_Click(object sender, RoutedEventArgs e) { var broker = new Broker { Name = txtBrokerName.Text, IsActive = (bool)chkIsActive.IsChecked, IsDefault = (bool)chkIsDefault.IsChecked }; // save the broker object to the database // is it ok to have NHibernate code here? feels wrong }
どうやったらいいですか?
すてきな回答ありがとうございます。ですから、NHibernateセッションをプレゼンテーション層に持ってきてそこからNHibernateライブラリを参照するのはいいですか?私はDAL.Repository.Save(ブローカー)のような何かをすべきかどうか疑問に思っていました;あるいは何か、そしてリポジトリクラスがセッションを作成するなどします。しかし、SessionFactoryの作成は高価です...それは私にとってはまだ分かりません。私は私の頭の中で円で回っています。インターネット上で私が何をしようとしているかを説明する例を知っていますか?私ははるかに明確な例を見つける。 –
さて、いいえ、私はビジネスレイヤーのような別のアセンブリを作るでしょう。ビジネス層では、たとえばBrokerServiceのようなクラスを作成します。ブローカサービスはSessionManagerに依存します。 BrokerServiceには、ブローカ情報を渡すAddBrokerというメソッドがあり、このメソッドはSessionManagerを使用してBrokerエンティティオブジェクトをデータベースに保持するためのHybernateセッションを作成しますが、例は見つかりませんがDDD(ドメイン駆動型デザイン)とIOC Inversion of Controlについて読むことをお勧めします – 7wp
ありがとうございました。私は今、大きな絵を見るのを手助けするためにヘッドファーストデザインパターンを読み始めました。 –