我正在學習DDD(域驅動設計)和存儲庫模式(在C#中)。我希望能夠使用存儲庫模式來堅持一個實體,而不關心實際使用哪個數據庫(Oracle,MySQL,MongoDB,RavenDB等)。但是,我不確定如何處理數據庫特定的ID:大多數(所有?)數據庫使用的數據庫。例如,RavenDB要求它應該存儲的每個實體都有一個字符串類型的id屬性。其他可能需要一個int類型的id屬性。由於這是由不同的數據庫處理不同,我不能使數據庫ID成爲實體類的一部分。但是至少當我存儲實際的實體時,它必須在某個時刻存在。我的問題是關於這方面的最佳做法是什麼?使用存儲庫模式抽取數據庫特定的id:s?
我目前正在追求的想法是,對於我想要支持的每個數據庫,爲每個業務對象類型實現特定於數據庫的「值對象」。這些值對象然後將具有數據庫特定的id屬性,並且我會在讀取和寫入之間映射兩者之間的映射。這似乎是一個好主意嗎?
你真的需要它嗎?對於我來說這似乎不是個好主意,因爲你會遇到維護地獄。 – xelibrion
我同意xelibrion在這裏。 – NotMe
我正面臨同樣的問題。不幸的是,這裏提到的解決方案中沒有一個將我描述爲「完美的解決方案」(如果有的話......)。我也考慮過轉換爲數據抽象層中的特定實現類型。我的意思是,雖然'DTO'和'DAO'是所有DB類型通用的接口,但任何特定的'DAO'實現都會將方法內的'DTO'轉換爲相同的特定實現類型假設一次只使用一種數據庫類型)。這樣,它將能夠使用特定的ID。這看起來很骯髒,但這是我迄今爲止最好的。 – eitanfar