2011-12-15 45 views
0

假設我有一個User對象,它由Usermapper生成。 User對象不知道任何關於正在使用的數據庫/存儲庫(我認爲這是一個好的設計)。與數據庫交互的函數的最佳做法

當創建User時,我只想讓它由映射器填充最平凡的東西,例如,名稱,地址等。然而,在對象實例化之後,我可能有一個方法userX.getTotalDebt(),getTotalDebt()需要重新連接到數據庫,因爲我不希望爲每個用戶實例化(需要多個表等)完成相對昂貴的操作。如果我只是在getTotalDebt()中插入一些sql,或者依賴項返回到Mapper,那麼耦合度非常快地增長。

有一個明顯的好的/最好的做法,因爲這是一種情況經常出現,但我找不到,或者我從一個錯誤的角度看這個問題。

回答

0

說我有一個User對象,它由Usermapper生成。 User對象並不知道任何關於正在使用的數據庫/存儲庫(我認爲這是一個好的設計)。

它們通常被稱爲POCO(Plain Old CLR Objects)。

當創建一個用戶時,我只希望它用最平凡的東西來填充映射器,名稱,地址等

有幾個OR/M層可以實現這一點。使用nhibernate或實體框架4.1代碼優先。

我可能有一個方法userX.getTotalDebt(),getTotalDebt()將需要重新連接到數據庫

那就不是一個波蘇了。儘管可以使用透明代理。 EF和nhibernate都支持這個,它被稱爲延遲加載。

有這個明顯好/最好的做法,因爲這是一個情況出現的時候,然而我不能找到它,否則我從錯誤的角度完全看這個問題

我通常保持我的對象愚蠢和斷開連接。我使用Repository模式(即使我使用nhibernate或其他orm),因爲它使我的類可測試。

我要麼直接使用存儲庫類,要麼創建一個包含所有邏輯的服務類。這取決於我的應用程序有多複雜。

+0

然後你/ ORM會在哪裏實現getTotalDebt()方法的功能?在Mapper的瞬間,具體地說 - 通過在數據庫中加入更多的表格?因爲我在您不喜歡透明代理/延遲加載方法的行之間閱讀。 – hbogert 2011-12-15 14:22:27

相關問題