2016-08-16 7 views
1

Я создаю аутентификацию micro-service/domain с помощью 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
  • Application Services координировать поток приложений и инфраструктуры, но не выполнять бизнес-логические правила или инварианты. Обычно встречаются обращения к репозиториям, единицам работы, а также к принятию и возврату объектов контрактных услуг или объектов запроса/ответа. Обычно они не принимают или не возвращают объекты домена или ценные объекты.

  • Доменные службы не знают об инфраструктуре или общем потоке приложений - они исключительно инкапсулируют правила бизнес-логики. Они принимают объекты домена или объекты ценности, выполняют условные операции над этими объектами или объектами или выполняют вычисления бизнес-правил, а затем возвращают примитивы или объекты домена или объекты ценности.

На основе этих понятий, ваша служба образца определенно обслуживание приложений, так как она взаимодействует с репозиторием и единицей работы, и возвращающая тип «UserResponse» (тип «ответ» не походит объект домена).

Ваша заявка на обслуживание AuthenticationService делегирует услугу под названием UserTokenFactory. UserTokenFactory принимает объект домена (пользователя) и возвращает объект valueobject домена (usertoken). Предположительно, он инкапсулирует в инфраструктурно-агностическом стиле бизнес-правила, связанные с созданием токена пользователя. Таким образом, это похоже на услугу домена. Фабрика, которая отвечает за создание доменных понятий, таких как объекты и объекты ценности, - это просто особый тип службы домена (на мой взгляд), хотя чаще всего вы увидите «службы домена», ссылающиеся на службы, которые выполняют некоторую бизнес-логику, которая требует координация между несколькими типами объектов.

Итак - я думаю, что ваша структура здесь уместна - у вас есть инфраструктура и поток, обслуживающий службу приложений, который делегирует специальную службу для выполнения бизнес-логики.