1

我正在開發一個C++域模型類庫,它應該提供一些工具或框架(即接口類等),用於將類實例數據寫入/讀取一個二進制文件和一個RDBMS。該庫的基礎是一個使用RDBMS的應用程序,並且有幾種方法通過執行一系列數據庫檢索和更新調用以獲取成員數據集合來實例化類。序列化數據訪問具有不同的數據組織方式,所以我希望域模型完全不知道主鍵/外鍵,ID等。如何使用數據訪問對象進行序列化和關係數據庫數據訪問

要解決此問題,我考慮使用Data Access Object(DAO)模式,並希望對DAO對象的「粒度」,生命週期和使用有一些建議(在您的回覆中,請注意,我將使用C++而不是Java,並且域類不能包含任何ID /密鑰信息從RDBMS或二進制文件存儲):

  1. 是否域對象的每個實例美孚擁有自己的FooDAO實例,或者是有Foo類的所有實例的單個實例FooDAO?
  2. FooDAO是否爲每個Foo實例創建一次,還是僅在需要訪問數據時創建FooDAO實例,並在之後立即銷燬?
  3. DAO上的J2EE頁面除DAO外還引入了DTO。爲什麼DAO不能傳輸數據?
  4. 對於具有其他域類Bar實例的複雜域類Foo,FooDAO類使用BarDAO類檢索數據似乎是不可避免的。這將導致域類結構和DAO類結構中的並行層次結構/依賴關係。這怎麼能最好地管理?

感謝您的幫助!

回答

1

我沒有一個很好的解決方案,但我可以告訴你我有什麼,以及一些想法和經驗。基於我之前看到過的模型,我構建了一個非常相似的東西,就像一個C++庫。

一些想法,沒有特定的順序:

  • 有在DB每個實例DAO對象的一個​​單獨的實例。如果你有一個共享實例,線程同步可能是一個問題,你將被迫做很多副本。
  • 由於幾個原因,我的庫DAO類使用與RDBMS類型緊密關聯的類型。首先,庫支持在底層數據存儲中自動創建和更新存儲,所以這些類需要有足夠的信息來創建表。其次,它使數據轉換變得更容易,並且可以優化(例如,可以使用本機接口直接執行ODBC/OLEDB數據副本)。缺點是你不能在DAO對象中有很好的類類型(例如:比實際字符串緩衝區更多數據的字符串抽象)。
  • 我按需創建,當然,因爲商店中的潛在數據可能比存儲在內存中的實際數據多得多。
  • 我嘗試保持DAO類簡單,具有最少的訪問器功能,並「關閉」底層數據結構。這意味着沒有其他的DAO類繼承,實例具有關鍵變量成員等

在DAO類我建立更方便類代表我的應用程序中的數據的頂部,可能會或可能不會映射1 1到DAO類。這些被允許具有任何類型的成員和結構,應該是應用程序使用的,並且具有將數據複製到DAO類中或從DAO類複製數據的方法。

希望有所幫助。

0

我不知道什麼是最好的實現,但這裏是我見過的做:

  1. 單獨爲每個實例。
  2. 在需要之前創建並在之後立即銷燬。
  3. 不知道。
  4. 將數據合併到DAO實例之外,從而避免耦合。

聲明:這正是我見過的。