2010-08-10 46 views
1

我有一個遺留數據庫,我的新應用程序必須與之交互。一般來說,舊數據庫過於標準化,設計不佳。例如,我的域中的一個對象表示數據庫中的五個表。我想讓我的域名層免受舊數據庫中的工件影響。我應該在這裏使用什麼模式?我的存儲庫是否有太多的邏輯?

乍一看,我想到了Repository模式。我會將我的對象傳遞給存儲庫,並讓它處理將數據分成五個表格。但是,有人認爲,必須完成的所有映射都會爲存儲庫增加太多的邏輯。那麼,它是否是一個糟糕的選擇?我應該使用另一種模式(如適配器)的存儲庫?或者說Repository是這種情況下的正確選擇?

回答

3

存儲庫模式在這裏是適當的,但使用DanP建議的Data Mapper將有助於堅持單一責任原則。諸如NHibernate和Entity Framework之類的ORM通常會促進數據映射器的角色,但如果您的數據存儲不利於使用ORM,則可以自己實現此邏輯。

Jeff Morris提供了一個在存儲庫模式here的上下文中使用Data Mapper的非常好的示例。

對於記錄,雖然ORM的工作是橋接object-relational impedance mismatch。關係數據庫模式在結構上通常與領域模型不同。由於其他原因,您的數據庫可能設計得不好,但實體和表之間缺乏一對一關係本身不應被理解爲設計不佳的指標。從DDD的角度來看,在數據庫被視爲應用程序域的持久存儲的情況下,數據庫可能已針對其寫入的原始域進行了適當規範化處理。

+0

引用數據映射器的那篇文章是非常豐富的+1 – DanP 2010-08-12 11:34:11

0

Gateway模式可能有幫助嗎?爲舊數據庫創建一個網關。將所有轉換邏輯放置在網關中。

2

我認爲Data Mapper模式是你所追求的。順便提一句,您可能會獲得關於Davy Brion在this series of posts中手動滾動您的數據訪問的一些見解。

我很感興趣,但爲什麼不去看NHibernate這樣的東西,而不是試圖自己做所有的骯髒工作?