2016-08-17 226 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