2016-08-17 228 views
1

在DDD中使用工廠的方法是正確還是建議?DDD中的工廠模式

工廠方法應該從應用程序服務接收所有必要的參數,還是允許我們在工廠內注入存儲庫並提取所需的數據?

它應該是(實施例1):

public class UserTokenFactory : IUserTokenFactory 
    { 
     IUserTypeResourceRepository _userTypeResourceRepository; 
     public UserTokenFactory(IUserTypeResourceRepository userTypeResourceRepository) 
     { 
      _userTypeResourceRepository = userTypeResourceRepository; 
     } 

     public async Task<UserToken> CreateWithAsync(User user) 
     { 
      var userTypeResources = await _userTypeResourceRepository.GetByUserTypeIdAsync(user.UserTypeId); 

      //Some logic for creating user tokens 
      throw new NotImplementedException(); 
     } 
    } 

或作爲(例2)

public class UserTokenFactory : IUserTokenFactory 
    { 
     IUserTypeResourceRepository _userTypeResourceRepository; 
     public UserTokenFactory(IUserTypeResourceRepository userTypeResourceRepository) 
     { 
      _userTypeResourceRepository = userTypeResourceRepository; 
     } 

     public UserToken CreateWith(User user, List<UserTypeResource> userTypeResources) 
     { 
      //Some logic for creating user tokens 
      throw new NotImplementedException(); 
     } 
    } 

回答

2

你被允許注入服務工廠。您的工廠基本上是一個正在創建對象的域服務。但是,我可能會依賴ISP,並且定義一個類似IResolveUserType的接口,而不是依賴於更廣泛的IUserTypeResourceRepository接口。您是指ISP提供的

+0

? – Robert

+0

界面分離主體 – tomliversidge