2012-01-13 60 views
6

我是新來的.Net和試圖學習的東西。我試圖建立一個PRISM4 WPF應用程序與棱鏡4 WPF應用程序 - MVVM,知識庫和工作模式實施模式的解決方案架構

  1. 的Visual Studio 2010 CSHARP速成版,
  2. 棱鏡V4,
  3. 統一爲國際奧委會,
  4. 的SQL Server CE作爲數據存儲。

我已經研究了很多(?)和thisthis等怕得罪人,並決定實施MVVM,庫和的UnitOfWork模式。此應用程序將與(我:-)

所以,我創建了一個解決方案具有以下項目的單個用戶的桌面應用程序:

  1. 殼牌(應用程序佈局和啓動邏輯)
  2. 通用(應用程序基礎設施和工作流程邏輯)
  3. BusinessModuleA(查看和的ViewModels)
  4. BusinessModuleA.Model(業務實體 - POCO)
  5. BusinessModuleA.Data(資料庫,DAT一個訪問(EF?))
  6. BusinessModuleB(查看和的ViewModels)
  7. BusinessModuleB.Model(業務實體 - POCO)
  8. BusinessModuleB.Data(資料庫,數據訪問(EF?))

我的問題是:

  1. 哪些項目應引用哪些項目?
  2. 如果我在'BusinessModuleX.Data'中執行存儲庫,這是 明顯,我應該在哪裏定義IRepositories?
  3. 我應該在哪裏定義IUnitOfWork以及我應該在哪裏實現UnitOfWork?
  4. 如果我在ViewModels中使用UnitOfWork和Repositories,可以嗎? Instict說它是不好的設計。
  5. 如果上述(4)不好,那麼ViewModel應該通過服務 圖層(另一個項目?)獲取數據。那麼,我們如何跟蹤 實體的變化,以便在服務層的這些對象上調用相關的CRUD方法?
  6. 這是否有任何意義,或者我錯過了大局?

好了,可能是我沒有把我的什麼我在我的第一篇希望十分清楚。沒有太多的答案提出來。我仍然在尋找答案,因爲儘管@Rachel建議可能對眼前的需求有效,但我想小心不要讓自己陷入一個角落。我有一個Access Db,這是我在Office開發的個人用途,並且已經成功,現在已被50多個用戶使用並不斷髮展。一開始維護和修改訪問代碼庫就相當簡單,但隨着應用程序的發展,開始崩潰。這就是爲什麼我選擇重新編寫.Net/Wpf/Prism中的所有內容,並希望確保基本設計正確。

請討論。

同時,我想出了this...

回答

4

首先,我將簡化您的項目列表中的位只ShellCommonModuleAModuleB。在每個項目中,我都有子文件夾來指定一切。例如,ModuleA可能被分成文件夾ViewsViewModelsModels

我會把所有的接口和全局共享的對象,如IUnitOfWorkCommon項目,因爲它將所有模塊使用。

你如何實現IUnitOfWork和你的Repositories可能取決於你的模塊是什麼。

  • 如果您的整個應用程序鏈接到一個數據庫或共享數據庫對象,那麼我可能會爲DataAccessLayer創建另外兩個項目。一個可以包含可以被你的模塊使用的公共接口/類,另一個將包含數據訪問層的實際實現,比如實體框架。

  • 如果每個模塊都有它自己的數據庫或數據庫中它自己的一組對象(即客戶對象不存在,除非您安裝了客戶模塊),那麼我將在模塊中實現IUnitOfWork並擁有他們處理他們自己的數據訪問。儘管如此,我仍然可以在Common庫中爲模塊構建一些通用接口。

理想情況下,你的所有模塊和你Shell可以訪問Common庫。模塊不應該彼此訪問,除非它們建立在它們之上。例如,建立在基本客戶模塊上的客戶統計模塊應該訪問客戶模塊。

至於如果你的ViewModels應該消耗UnitOfWorkRepository,我會讓他們只使用Repository。理想情況下,您的Repository應該像黑匣子 - ViewModels可以使用Repository獲取/保存數據,但不應該知道它是如何實現的。存儲庫可以從服務,實體框架,直接數據訪問或任何位置獲取數據,並且ViewModel不會在意。

我在設計建築方面的專家,但是這就是我想建立它:)

+0

嗨,謝謝你的迴應。不將M-V-VM組織到文件夾中,而是在同一個項目中將它們緊密結合在一起?是的,我的模塊每個都有自己的數據庫,並且完全不相關/不知道其他模塊,當然,除了「通用」之外。 – yoursvsr 2012-01-13 16:43:52

+0

我的第四個問題是關於使用UnitOfWork'和'Repositories not'或'。我認爲Repositories是用UnitOfWork注入的構造函數來完成他們的工作。此外,允許每個模塊處理其自己的DataAccessLogic再次密封所有東西,對嗎?我不知道這是否會打破棱鏡和上面列出的模式試圖實現的鬆耦合和模塊化開發的目的。 – yoursvsr 2012-01-13 16:51:07

+0

@yoursvsr對象可以共享一個項目並仍然可以分離。例如,在MVVM中,唯一需要引用的參考是您的ViewModels引用您的模型,以及您的視圖引用Models/ViewModels。實際物體存在並不重要。 – Rachel 2012-01-13 16:53:07