2013-09-27 72 views
0

我一直在研究一個小項目,試圖開發一個多功能的數據存儲選項,這將允許我使用關係數據庫和文檔數據庫。出於測試目的,我將以MySQL和MongoDB開始。我所有的邏輯和數據都存儲在域對象(由值對象組成)中,因此,我只需要一種將「映射」到適當的數據存儲的優雅方式。Verstile數據存儲:通過DDD進行抽象以存儲在關係數據庫或文檔數據庫中?

有沒有什麼設計模式可以幫助我呢?

回答

0

如果您想要採用域驅動設計(DDD)方法,則可能需要存儲庫

首先,你需要定義庫的合同(或接口),通常是這樣的(調整任何一種語言,您正在使用):

pubic IMyObjectRepository { 
    MyObject get(int id); 
    Collection<MyObject> getAll(); 
    void save(MyObject myObject); 
    void delete(int id); 
} 

然後你就可以有一個MySQL的實現和MongoDB。

要從IMyObjectRepository的代碼中分離出的客戶端以及它是如何創建的,客戶端可以通過抽象工廠模式,或類似的請求吧。然後,您可以根據屬性文件或某種其他類型的環境內省,向他們返回正確的實現。

DDD這方面可能是次要的 - 你可以做到這一點沒有DDD。您主要關心的是以某種與實現無關的方式(一個接口)定義您的持久性契約,並且有一種方法可以在不將客戶端耦合到實現(抽象工廠)的情況下對其進行引用。 A 版本庫是一種方式 - 您可以在DAO(或兩者的組合)中執行此操作。

Here is an example using DAOs and and Abstract Factory這可能會給你一些想法。