互動

2017-03-05 56 views
0

我在倉庫和layerd應用初學者,我不inderstand以及它是互動和信息庫和業務層類之間的關係互動

下面是一個例子在3層purchaese秩序,我要檢討是否正確與否,你的校正

爲DataAcesslayer

庫OrderRepositolry

Namespece Dal 
    { 
       Public class RepositoryOrder 
       { 
              POrderContext context = new POrderContext(); 
  
              Public IEnumrebale <Order> GetAll() 
              { 
                   Context.Orders; 
              } 
// Following code 
       } 
    } 

爲順序庫代碼的項目:

namespece Dal 
{ 
     public class RepositoryOrderItem 
     { 
      POrderContext context = new POrderContext(); 

      public IEnumrebale<OrderItem> GetAllItemById(Order o) 
      { 
        context.OrderItems.where(i => i.OrderId == o.Id); 
      } 

      public OrderItem GetItemById(int id) 
      { 
       context.OrderItems.Find(id); 
      } 
//Following code 
     } 
} 

爲businessLayer這裏是classOrderBLL代碼:

namespace BLL 
{ 
     public class OrderBLL 
     { 
      RepositoryOrder repoOrder = new RepositoryOrder(); 
      RepositoryOrderItem repoItem = new RepositoryOrderItem(); 

      public IList<Order> GetAll() 
      { 
       return repoOrder.GetAll(); 
      } 

      public decimal GetPrixTotal(Order order) 
      { 
       var query = from item in repoItem.GetAllItemById(order) 
           select sum(item=>item.Prix * item.Quantite); 
       return query; 
      } 
     } 
} 
  1. 不總價計算在在倉庫 的或電平進行BLL的級別(我們可以在存儲庫中使用上下文 發出此請求)?

  2. CRUD方法在存儲庫中完成,它們在BLL上從 存儲庫調用是正確的嗎?

  3. 確實的,其中方法在LINQ對應於邏輯業務或
    存儲庫(數據訪問層),因爲它決定在 業務一定的規則?

回答

1

我相信這個問題會被否決的「主要基於意見」但是在這之前發生了,我會跳給我的「主要依據的意見」的答案:-)

有兩種劃分數據庫應用程序的方式,它們取決於它的複雜程度和大小。實體框架示例傾向於給出一個非常簡單的模型,其中EF Data類暴露於Business層,然後將它們公開給View Model或其他層。這對於簡單的應用程序來說可能是正確的,但對於更復雜的應用程序,以及數據存儲方法不是RDBMS(即No-SQL)或想要在業務和存儲庫數據結構之間創建分離的應用程序太簡單。

存儲庫層應該有一組描述如何從存儲庫訪問數據的類。如果您有RDBMS,這些可能是EF POCO類,但是如果您有一個Web服務端點作爲您的存儲庫,則可能是SOAP文檔或REST結構或其他數據傳輸對象。對於像SQL Server這樣只使用存儲過程來訪問數據的RDMBS,Repository層可能只是一組類,它們反映了存儲過程返回的命名和參數以及數據集。請注意,由RDBMS以外的任何其他數據結構可能不一致 - 即由存儲庫中的一個方法調用返回的「客戶」概念可能與通過不同調用返回的「客戶」的數據結構不同。在這種情況下,存儲庫類不適合EF。

轉移到業務對象層 - 這是使用數據類,驗證類和流程類模型創建業務域模型的地方。例如,一個用於記錄銷售訂單的流程類可能會結合一個業務客戶,業務銷售訂單,業務產品目錄數據概念並捆綁許多驗證類來形成單個原子業務流程。這些類可能(如果你正在做一個非常輕量級的應用程序)與Repository層的數據類似,但它們應該單獨定義。在此層中,您持有「銷售訂單合計」或「增值稅計算」或「運輸成本」等計算概念。他們可能會或可能不會將其存儲到您的存儲庫中,但他們的含義的定義將在業務層中進行建模。

業務層提供將其數據複製到View Model中的類。這些類再次可以與存儲庫類非常相似(並且在最簡單的情況下,與其相同),但是他們的工作是模擬用戶界面和用戶交互。它們可能只包含業務數據類中的部分數據,具體取決於UI的需求。這些類應該執行基於用戶界面的驗證,他們可能會委託給業務層,或者可能會添加額外的驗證。這些類的工作是管理作爲用戶界面的狀態機。

我的總結是,在一個大型系統中,你有三組類;數據存儲庫交互,業務模型交互和用戶界面交互。只有在最簡單的系統中,他們才被模擬爲一組物理POCO類。