2016-08-17 3 views
1

DDDで工場を使用するのに正しいまたは提案された方法はどれですか?DDDのファクトリーパターン

ファクトリメソッドは、アプリケーションサービスから必要なすべてのパラメータを受け取るか、リポジトリを挿入して必要なデータを工場に取り込むことができますか?あなたは工場にサービスを注入するために許可されている

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

は(実施例1)であるべきです。あなたの工場は、基本的にオブジェクトを作成するドメインサービスです。しかし、私はおそらくここにISPに頼って、より広いIUserTypeResourceRepositoryインターフェイスに依存するよりむしろIResolveUserTypeのようなインターフェイスを定義します。

+0

ISPの意味ですか? – Robert

+0

インタフェース分離主体 – tomliversidge