2011-03-19 33 views
1

我用下面的T4創建我的倉庫& UOW: http://blogs.microsoft.co.il/blogs/gilf/archive/2010/07/05/repository-and-unit-of-work-t4-template-for-entity-framework.aspxUOW及庫+服務

現在我想添加一個服務層。我能做到這樣的事:

public ActionResult Index() 
{ 
    using (DataEntities context = new DataEntities()) 
    { 
     UnitOfWork uow = new UnitOfWork(context); 

     //Service 
     ClientService cli = new ClientService(uow); 
     var col = cli.getActive(); 

     //Map results to ViewModel 
     var list = AutoMapper.Mapper.Map<IEnumerable<Client>, IEnumerable<ClientListViewModel>>(col); 

     return View(list); 
    } 
} 

這工作得很好,但是......

在架構正確的UOW實例傳遞給服務層?
(我在它的構造函數使用IUnitOfWork)

我試圖移動上下文& UOW服務層內,但上下文不可用時,我嘗試在控制器中的結果視圖模型映射。

謝謝!

回答

1

我會認爲不是。再說一遍,我不是工作單位的忠實粉絲 - 我覺得它太瞭解了。我會將必要的存儲庫傳遞給您創建的服務。通常情況下,我結束了特殊的「GetService的」或「的CreateService」,但是這可能爲你工作......(我在寫這寫意所以它可能不是建)

Public class DoSomethingCoolService : IDoSomethingCoolService 
{ 

    private IRepository<SomethingINeed> _neededRepository; 

    public DoSomethingCoolService(connectionOrContext) 
    { 
      //setup 
    } 

    public DoSomethingCoolService(IRepository<SomethingINeed> neededRepository) 
    { 
      _neededRepository = neededRepository; 
    } 

    public List<SomethingINeed> ReturnWhatIWant() 
    { 
      _neededRepository.Where(x => x.WhatIWant = true); 
    } 

} 

就個人而言,我不喜歡這個。我喜歡的東西更多類似這樣的...

public interface IGetService<T> 
{ 
    //usual get suspects here 
} 

public class GetService<T> : IGetService<T> 
{ 
    private IRepository<T> _repository; 
    GetService(IRepository<T> repository) 

    //use repository to call gets 
} 
現在

的複雜十歲上下的東西...

public interface IGetClientService : IGetService<Client> 
{ 
    List<Client> GetClientsForSomething(int someId); 
} 

public class GetClientService : GetService<Client>, IGetClientService 
{ 
     private IRepository<Client> _repository; 
     GetClientService(IRepository<Client> repository) : base(repository) 

     public List<Client> GetClientsForSomething(int someId) 
     { 
       //some crazy cool business logic stuff here you want to test! 
     } 
} 

然後我的控制器內,我只是對IGetClientService的依賴,並使用它在必要時。易於測試,易於製造另一個不依賴於它的產品。

這是否有意義?