2013-09-26 45 views
0

我正在使用與域圖層抽象的MVC模式。我可以將域對象轉換爲等效的DTO,並通過頂層(即控制器&最終到視圖)發送它。現在如何做相反的事情? &如何構建實際的DTO對象並將其傳遞給控制器​​?如何從控制器構造DTO對象

回答

0

我發現做這件事的最好方法是擁有一個DTO服務層。這將是控制器(或其他任何東西)可以調用來檢索和轉換DTO的函數的集合。

我也建議在這一層做域對象DTO映射(和相反),它將所有的DTO相關邏輯保留在一個層中。

下面是一個DTO服務層功能的例子:

 public CustomerDto GetCustomer(Guid customerId) { 

     var roService = new RoService<Customer>(new Repository<Customer>(_dbContextFactory)); 
     return _mapper.ToCustomerDto(roService.Get(customerId)); 
    } 

這將檢索其ID的客戶實體。該實體被傳遞給映射器對象,該對象將其轉換爲CustomerDto以供其返回。

N.B.我使用AutoMapper將我的域對象轉換爲DTO。

+1

感謝您的解釋。但是,在這種情況下,我們如何保存或刪除客戶?我相信我們會調用roService.Save/Delete(customer)。如果是這樣,這個'客戶'對象在哪裏初始化? (請原諒,如果這是一個天真的問題,作爲MVC和倉庫模式的新手) –

+0

是的,這是正確的,你可以調用roService.Delete(customerId)。那麼,使用這個例子你可以調用.Get(customerId),它將返回所需的Customer對象。現在,我們需要映射該實體的CustomerDto,這在某些映射類進行: '公共CustomerDto ToCustomerDto(客戶項目) { \t \t \t回Mapper.Map <客戶,CustomerDto>(項目); }' 這將返回一個新的CustomerDto,其中包含您定義的所有映射字段。正如我所說,我個人使用過AutoMapper。我希望這有幫助。 –