2012-05-04 39 views
0

我目前正在開發中等規模的應用程序。應用程序將具有不同表示層的n層結構。其中一部分將是一個網絡應用程序,但很可能會有其他部分涉及傳感器通信(目前尚不清楚在此階段將如何開發)。具有延遲加載的BusinessLogic中的NHibernate會話

我的問題是,如果可以直接在業務邏輯層使用NHibernate,並讓業務邏輯在延遲加載時爲請求的數據提供上層和水平層/部分。

是否可以初始化業務層中的會話並且仍然有延遲加載?在那種情況下,會議將如何處理?是否有可能將請求的數據與會話一起包裝,以便只要對象處於活動狀態,會話就處於活動狀態?

祝您有愉快的一天。

回答

0

不知道我完全理解你的問題,但從我收集的信息來看,當你的客戶端不是web客戶端時,你是否可以使用延遲加載。
答案是肯定的;無論您的Session初始化的方式或地點如何。

直接在業務層使用nHib被一些人(包括我自己)認爲是最佳實踐。

關於你對「與會話包所請求的數據一起,從而使會話還活着的問題,只要對象是alive'-
我不知道你的意思,但如果你的意思是你的發送模式與會話一起上課,這樣你的客戶就可以懶洋洋地加載他們的屬性了 - 我強烈建議不要去那裏。
經驗法則是,您只需向客戶發送所需的信息,僅此而已。
(Ayende elaborates就可以了。)
因此,我認爲您應該總是使用DTO與您的客戶溝通。

我設置的方法是:
客戶端從服務器請求數據=>服務器加載對象(但不會初始化延遲加載的屬性),填充DTO並將其返回給客戶端。

客戶端請求延遲加載的屬性=>服務器加載對象(使用nHib的第二級cache或其他一些緩存機制),加載請求的屬性並將DTO返回給客戶端。