我建立,目前有3個組件項目的使用:架構MVC Web項目/不同類型的模型
- UI
- 核心(服務&模型,實用程序)
- 庫( LINQ2SQL)
依賴是
- 用戶界面 - >核心
- 核心 - >存儲庫。
我想業務和模式是在自己的組件,並與同時圍繞模型建立的東西最終,即:
- UI - >模型,服務
- 服務 - >模型,庫
- 庫 - >模型
- 模型
釷我正在構建的e系統基本上是一個網站CMS,因此我將爲網頁(PageModel)建立一個模型,該網頁包含子網頁集合。 PageModel可以調用服務(PageService)中的方法來填充其子頁面,但是在新設計中不可能發生,因爲Models集合對服務程序集一定一無所知。
我已經考慮過在洋蔥體系結構(即依賴注入)中的一些想法來解決這個問題,但似乎可以使用更優雅/明顯的解決方案。
我是否需要引入另一層模型?查看模型?我認爲我所說的模型是領域模型......我可能錯了!服務將是域服務?
所以我的解決辦法是:
- UI - >服務,的ViewModels,模型
- 的ViewModels - >服務,模型
- 服務 - >存儲庫,模型
- 庫 - >模型
- 模型
在這個例子中,我想像m y PageViewModel將擴展PageModel並使用PageService來獲取它的子頁面。
任何建議讚賞。還有關於這些模型通常被稱爲什麼的指針?我在這裏談論的是DTO模型而不是域模型?和領域模型而不是視圖模型?看起來我提議使用視圖模型並不是視圖模型的工作。
感謝
編輯:
這是我從來沒有最初提到的是,我的領域模型是不是單一的數據庫實體的基本翻譯就像你會在大多數教程看到的。域模型可以包含來自多個相關數據庫表的數據字段。
所以值得擁有一組模型純粹是爲了封裝域中的數據 - 沒有任何方法/屬性來獲取相關對象或將對象保存回數據庫等? - 數據傳輸對象。
從看一對潦草的圖表,這將意味着在域圖層中有一組映射器(這似乎是錯誤的)將DTO模型翻譯爲域模型並返回。該項目將圍繞DTO模型而不是域模型構建,但給出了DTO封裝的內容,我不認爲這是一個問題。
任何人誰是有興趣的,所提出的依賴結構會像這樣:
- UI - >服務,領域模型
- 服務 - >存儲庫,領域模型中,DTO模式
- 領域模型 - >庫,DTO模型
- 映射器 - >域模型,模型DTO
- 庫 - > DTO模型
- DT O型號(無相關性)
這有點混亂!所有這一切都只是因爲我希望我的PageModel能夠獲取自己的子頁面模型。它看起來像是在依賴注入方面可能不是一個壞計劃。
感謝那些已經回覆的人。你給了我很多想法。
謝謝亞當。將存儲庫接口放在域中似乎是一種以域爲中心的一切方式的好方法。 在持久性點上,我的域模型爲Save()提供了便捷的方法,它只是在相關存儲庫中調用Save()方法。你會認爲這是持久性邏輯,因此不好的做法? – Giles 2012-02-28 22:44:25
雅,他們應該對此一無所知。將實體傳遞到您的存儲庫,並讓它成爲處理所有事情的單一位置。這可以很好地適應工作單元模式,因爲存儲庫可以被重構爲現在實際上將其保存到集合中,並且工作單元實現將該集合保存到一個事務中的數據庫中。您的服務不是調用模型上的Save(),而是知道調用存儲庫實現,該實現應該注入到控制器或存儲庫中。這非常適合測試/嘲笑/等。 – 2012-02-28 22:59:57