2011-10-12 61 views
3

我必須使用Entity Framework 4.1和ASP.NET構建Web應用程序的體系結構。我已經有了數據庫結構,所以我必須使用數據庫的拳頭。我在這裏閱讀了很多文章和主題,但似乎我錯過了一些東西。我已決定以下列方式組織項目:使用Entity Framework 4和Repository Pattern的多層體系結構

我已經用Linq2Sql構建了一個Web應用程序。我用this project。它提供了一個T4模板,爲每個實體生成一個特定的靜態資源庫類。我喜歡這種方法,因爲它很容易向任何存儲庫添加額外的邏輯,例如GetUserByName()。我喜歡這種方法,但目前爲止我還找不到EF4的類似方法。我發現只有通用的存儲庫,然後我必須手動創建具體的存儲庫。在這種情況下,我不喜歡的首先是我正在處理的應用程序有一些複雜的業務邏輯,所以我將不得不手動創建幾乎每個實體的具體存儲庫。其次,如果起初我使用通用資源庫來獲取所有實體,並且以後需要使用例如GetUserByName(),那麼代碼中會出現不一致。我寧願所有的數據都是以相同的方式完成。

我要麼遺失了一些建築結構。

  • 通用:通用信息庫,如果這裏有必要進行分隔

  • DAL:本EDMX(實體模型)與上下文類和庫

  • BLL文件:的業務邏輯系統

    - 實體

    - 服務

    - 等

  • UI:ASP.NET頁面

問題:

  1. 是邏輯的分離是否正確?

  2. 我應該使用特定的存儲庫嗎?

  3. 什麼樣的存儲庫模式的實施,你會推薦最好的項目組織和易於使用?

  4. 使用靜態存儲庫更好嗎?

由於

+4

在windows和web開發的沉重金融系統中擁有背景我到目前爲止只有很少的問題,爲什麼你認爲你的實體應該住在BLL中至今我的經驗是實體是非常基本的單元, 。 –

+0

那時我還沒有做出最後的決定。我也想用EF生成它們並將它們放入DAL中。 – Thea

+2

@泰迪 - 這些實體應該(可以)進入一個共同的「層」/裝配體,以​​便它們可以重新使用;這些與實體數據訪問專用的EF實體不同。 –

回答

0

我的首選設置是:

  • Project.Presentation(UI)
  • Project.Application(應用層,該層暴露DTO的消費者/用戶界面和執行這些命令域層)
  • 項目。域名
    • 實體[與邏輯域(訂單,客戶,...)
    • 域服務(TransferService,CreditCardService ...)
    • 庫接口(IOrderRepository,ICustomerRepository,...)
  • Project.Repositories.EF(數據存取使用特定的技術實現存儲庫接口(OrderRepository,CustomerRepository)
  • Project.Infrastructure(交叉切割)
1

不要使用靜態類作爲存儲庫。對於正確的面向對象的設計來說這很可怕。它也完全阻止了任何控制和依賴注入反轉的可能性。

如果您要使用存儲庫模式,則必須使用特定存儲庫。通用存儲庫只是EF相關類的包裝(其中ObjectSet/DbSet已經是EF相關存儲庫)。您還應該在聚合根之上構建存儲庫,而不是在每個實體之上。

+0

感謝您的建議。你知道生成特定存儲庫的方法嗎?手動操作既費時又麻煩。 – Thea

+0

特定存儲庫是手動作業... –