我正在學習NHibernate,並創建了一些單元測試,並且進行得非常順利。我主要的應用程序只有兩層:我的表示層應該在NHibernate中創建會話嗎?
- 演示(WPF應用程序)
- 域(具有業務邏輯和數據訪問)
當然,我有我的單元測試項目(測試)。
我的單元測試在[TestFixtureSetup]
期間調用我的SessionManager
類建立SessionFactory
。然後每個[Test]
獲得一個Session
來執行數據訪問單元測試。我想知道我應該如何在WPF項目中做到這一點。
我創建了一個簡單的對話框來查看我是否可以將我的WPF應用程序連接到我的數據庫。在我的Presentation層有一個對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(經紀人);'或者什麼的,然後Repository類創建會話等。但是然後SessionFactory的創建是昂貴的......它仍然不清楚,我和我在腦海中轉圈。你知道互聯網上的任何例子,說明我想要做什麼?我發現更清晰的例子。 –
2012-01-17 22:26:11
嗯..不,我會做一個獨立的程序集,叫做Business Layer。在業務層,我會創建一個名爲BrokerService的類。代理服務將具有對SessionManager的依賴性。 BrokerService可能有一個名爲AddBroker的方法,您將代理信息傳遞給該方法,然後該方法使用SessionManager創建一個Hybernate會話,用於將Broker實體對象保存到數據庫中,但我找不到示例,但我推薦閱讀DDD(域驅動設計)和IOC Inversion Of Control – 7wp 2012-01-18 21:50:29
謝謝我現在已經開始閱讀Head First Design Patterns,以幫助我瞭解全局。 – 2012-01-19 17:07:12