微服务文件夹结构

时间:2019-09-03 13:53:27

标签: .net microservices

微服务

  • 身份
    • Api
    • 应用
      • 接口
        • IUserService.cs
      • 服务
        • UserService.cs
    • 数据
      • CommandHandlers
        • CreateUserCommandHandler.cs
      • 命令
        • CreateUserCommand.cs
      • 接口
        • IUserRepository.cs
      • 事件

按照这种方法,我无法将IUserService接口注入我的CreateUserCommandHandler(循环引用)。 显然这不是正确的方法,您将如何重组此文件夹组织?

public class CreateUserCommandHandler : IRequestHandler<CreateUserCommand, bool>
{
     private readonly IEventBus _bus;
     // private readonly IUserService _userService; cannot access this

      public CreateUserCommandHandler(IEventBus bus)
      {
          _bus = bus;
      }

      public Task<bool> Handle(CreateUserCommand request, CancellationToken cancellationToken)
      {
         _bus.Publish(new UserCreatedEvent(request.Name, request.Email));
          return Task.FromResult(true);
      }
}

1 个答案:

答案 0 :(得分:2)

处理程序类通常是应用程序项目的一部分。

域实体不应与任何其他项目有任何依赖关系。应该将它们视为您项目的核心。他们的唯一职责是包装业务逻辑并确保其状态始终保持一致。

服务可以表示应用程序服务和域服务。域服务应该是域项目的一部分。 Domain vs application services

我会将命令和事件类放在API项目中。

因此,在您的情况下,Domain项目将具有一个User类,该类包装用户的所有业务逻辑,存储库接口表示持久性抽象,最后是User域服务,以便能够在多个逻辑之间进行协调用户实体。