2010-12-07 85 views
0

我必須啓動一個項目,其中支持的數據庫是SQL Server,而且我使用.Net framework 3.5。Linq to SQL生成單獨的業務類或實體類

我決定將LINQ to SQL用於數據訪問層。我應該編寫單獨的類來用於業務層和表示層,或者我使用LINQ to SQL自動生成的實體類。

回答

3

我使用實體框架代碼第一次,但下面的概念是相同的(爲不平凡的項目):

我總是把我的DAL類從我實際的業務層。這樣可以減少數據庫更改對應用程序的影響。除了我的DAL項目以外,我從不使用DAL類。

我目前的項目採用DDD的,任何佈局類似於以下(大規模簡化):

MainApp      
MainApp.Domain    
    |...IRepositories 
    |...AggregrateX 
    |...AggregrateY 
MainApp.Dal    
    |...Models 
    |...Repositories 
  • MainApp - 可以看到站點,但不DAL
  • MainApp.Dal - 可以看到站點,但不 MainApp

的DAL庫方法使AutoMapper的使用:

public Customer Get(int customerId) 
{ 
    using (var context = GetContext()) 
    { 
     var entity = context.Customers.Where(x=> 
      x.CustomerId == customerId).Single(); 

     return Mapper.Map<DtoCustomer, Customer>(entity); 
    } 
} 

public void Save(Customer customer) 
{ 
    using (var context = GetContext()) 
    { 
     var entity = context.Customers.Where(x=> 
      x.CustomerId == customer.CustomerId).Single(); 

     Mapper.Map(customer, entity); 
     context.SaveChanges(); 
    } 
} 

從而允許我的業務類和我的實際DAL/DTO對象之間完全分離。理論上,它允許更改整個後端而不影響任何業務邏輯。我沒有展示的是,我還確保表示層從未看到域/業務對象,因爲我通過外觀映射到輸入/視圖模型並從中映射。

基本上,我剩下的是一個包含所有業務邏輯的領域層,這些業務邏輯不關心正在使用什麼,它如何填充或如何持久化,DAL層的唯一目的是人口和持久性我的領域/商業類。

但是,這對於大型項目來說纔有意義。我只會在瑣碎/小型項目上使用DAL類。

0

我可以告訴你我們做了什麼。我們正在將L2S用於我們的下一代製造應用。我們是一家2.5億美元的全球太陽能製造公司。我們有兩套實體。我們有我們的L2S實體,我們在我們的「後端」嚴格使用。然後,我們在我們的客戶端應用程序中使用一組更輕的應用程序/域實體,並將它們反覆傳遞到我們的後端。

在許多情況下,我們將使用視圖來模擬我們的域實體,然後將視圖作爲只讀表引入到我們的L2S模型中。這使我們能夠擁有'域'實體,並且我們能夠使用L2S來查詢相應的視圖以保護這些實體。

適合我們。

+0

您的'客戶端應用程序'Web應用程序或智能客戶端,如Win Forms或Silverlight? – Steven 2010-12-07 13:10:14

+0

@Steven - 我們都有三個。 Web應用程序,Win表單和一對Silverlight應用程序。 – 2010-12-07 13:11:32