2016-08-16 9 views
1

DDDを使用して認証マイクロサービス/ドメインを構築していますが、各サービスがどこに属しているかを特定することにはまだ問題があります。この時点では、認証サービスがドメインサービスまたはアプリケーションサービスに属しているかどうかはわかりません。このドメインまたはアプリケーションサービスですか?

ドメインserrviceでこの動作をラップし、アプリケーションサービス経由でレスポンスオブジェクトを公開するか、これはアプリケーションサービスとしてそのまま維持する必要があります。

public class AuthenticationService : IAuthenticationService 
    { 
     IAuthUnitOfWork _uow; 
     IUserRepository _userRepository; 
     IUserTokenFactory _userTokenFactory; 

     public AuthenticationService(IUserTokenFactory userTokenFactory, IUserRepository userRepository, 
      IAuthUnitOfWork uow) 
     { 
      _userTokenFactory = userTokenFactory; 
      _userRepository = userRepository; 
      _uow = uow; 
     } 

     public async Task<UserTokenResponse> AuthenticateAsync(string email, string password) 
     { 
      var user = await _userRepository.GetByEmailAndPasswordAsync(email, password); 
      //TODO: Add null check for user 
      var userToken = await _userTokenFactory.CreateWithAsync(user); 

      await _uow.SaveChangesAsync(); 

      return new UserTokenResponse 
      { 
       ExpiressOn = userToken.ExpiressOn, 
       Token = userToken.Token 
      }; 
     } 

    } 

答えて

7
  • アプリケーションサービスは、アプリケーションフローとインフラの座標が、ビジネス・ロジック・ルールや不変条件を実行しないでください。リポジトリや作業単位の呼び出しを確認し、サービス契約オブジェクトや要求/応答オブジェクトを受け入れて返すのが一般的です。一般に、ドメインエンティティまたは値オブジェクトを受け入れたり返さない。

  • ドメインサービスは、インフラやアプリケーション全体の流れを知らない - 彼らは排他的にビジネス・ロジック・ルールをカプセル化します。ドメインエンティティまたは値オブジェクトを受け入れ、それらのエンティティまたはオブジェクトに対して条件付き操作を実行したり、ビジネスルール計算を実行したりして、プリミティブまたはドメインエンティティまたは値オブジェクトを返します。これらの概念に基づいて

それは仕事のリポジトリとユニットとの相互作用、および「UserResponse」タイプを返しているように、あなたのサンプルサービスは、間違いなく、アプリケーションサービスである(「応答」タイプは、のような音はありませんドメインエンティティ)。

アプリケーションサービスAuthenticationServiceUserTokenFactoryというサービスに委任しています。 UserTokenFactoryはドメインエンティティ(user)を受け入れ、ドメインのvalueオブジェクト(usertoken)を返します。おそらく、それは、インフラストラクチャに依存しない方法で、ユーザートークンの作成に関連するビジネスルールをカプセル化します。したがって、これはドメインサービスのように見えます。エンティティやバリューオブジェクトなどのドメインコンセプトの作成を担当するファクトリは、ドメインサービスの特別なタイプ(私の意見では)ですが、「ドメインサービス」は、必要なビジネスロジックを実行するサービス複数のタイプのエンティティ間で調整します。

ここであなたの構造は適切だと思います。インフラストラクチャとフローを調整するアプリケーションサービスがあり、ビジネスロジックを実行する特別なサービスに委任します。

関連する問題