我有Domain
組裝和裝配SqlServerRepository
。我應該在哪裏把接口和實現
SqlServerRepository
組件具有上Domain
組件的引用,Domain
組件不會對其它組件的參考。
Domain
程序集具有接口IRepository
(和其他存儲庫),因爲域邏輯僅適用於接口類型,不考慮具體類型。 (其包含在Domain
組件中)。
而且這沒關係,我可以嘲笑IRepository
,可以使用OracleRepository
執行和其他...
但是我覺得我有一些架構問題...
SqlServerRepository
不能沒有工作Domain
裝配- 在另一方面,如果我把接口在
SqlServerRepository
裝配,Domain
不會沒有SqlServerRepository
裝配工作,如果我創建OracleServerRepository
組裝,我必須ū SESqlServerRepository
過,因爲我把接口的SqlServerRepository
和Domain
alredy使用它們。 - 應該在哪裏我的數據庫對象映射到域?在
SqlServerRepository
或Domain
程序集中?
我想過只包含接口組件,以及Domain
和SqlServerRepository
參考它,但我認爲這是開銷爲我的項目(微服務)
所以,我必須做什麼?
我認爲一個簡單包含必要'接口'的普通項目將是最好的方法。這將允許您只依賴'Domain'中的通用項目,反之則來自'Repository'。從我的問題中可以看出,這將從存儲庫邏輯中完全分離您的域邏輯,儘管這取決於是否希望管理另一個項目的開銷。但我會說,這個開銷值得完全解耦。 –
我通常有一個「Core-Contract」/「Core-Implementation」項目對,並使用一個DI工具將它們結合在一起。我的目標是避免實施項目中的依賴關係。這保持了很乾淨。 – Enigmativity
如果您真的想將SqlServerRepository從IRepository中解耦,您可以刪除依賴項並在兩者之間使用[adapter](https://en.wikipedia.org/wiki/Adapter_pattern)。然而,這是矯枉過正,我肯定會*不推薦它。 [由jgauffin回答](http://stackoverflow.com/a/35986972/446278)就好了。 – proskor