同时使用 Application Service 和 Manager 的目的是什么?

What is the purpose of using both Application Service and Manager?

我不是一个有经验的程序员。我总是浏览源代码来学习一些东西。 ASP.NET 样板是我最喜欢的。昨天,我注意到有友谊申请服务(在service/application层)和友谊管理器(在business/domain层)。我不明白为什么会有友谊经理。友情服务还不够?

public interface IFriendshipAppService : IApplicationService
{
    Task<FriendDto> CreateFriendshipRequest(CreateFriendshipRequestInput input);

    Task<FriendDto> CreateFriendshipRequestByUserName(CreateFriendshipRequestByUserNameInput input);

    void BlockUser(BlockUserInput input);

    void UnblockUser(UnblockUserInput input);

    void AcceptFriendshipRequest(AcceptFriendshipRequestInput input);
}
public interface IFriendshipManager : IDomainService
{
    void CreateFriendship(Friendship friendship);

    void UpdateFriendship(Friendship friendship);

    Friendship GetFriendshipOrNull(UserIdentifier user, UserIdentifier probableFriend);

    void BanFriend(UserIdentifier userIdentifier, UserIdentifier probableFriend);

    void AcceptFriendshipRequest(UserIdentifier userIdentifier, UserIdentifier probableFriend);
}

来自 NLayer-Architecture 上的文档:

The application layer ... perform[s] requested application functionalities. It uses Data Transfer Objects to get data from and return data to the presentation or distributed service layer. ...

The domain layer ... perform[s] business/domain logic. ...

在高级评论中,这意味着什么:

// IFriendshipManager implementation

public void CreateFriendshipAsync(Friendship friendship)
{
    // Check if friending self. If yes, then throw exception.
    // ...

    // Insert friendship via repository.
    // ...
}
// IFriendshipAppService implementation

public Task<FriendDto> CreateFriendshipRequest(CreateFriendshipRequestInput input)
{
    // Check if friendship/chat feature is enabled. If no, then throw exception.
    // ...

    // Check if already friends. If yes, then throw exception.
    // ...

    // Create friendships via IFriendshipManager.
    // ...

    // Send friendship request messages.
    // ...

    // Return a mapped FriendDto.
    // ...
}

请注意 AppServiceManager 中的关注点(和由此产生的操作)略有不同。

Manager 可以被 AppService、另一个 Manager 或代码的其他部分重复使用。

例如,IFriendshipManager 可用于:

  • ChatMessageManager
  • ProfileAppService
  • TenantDemoDataBuilder

另一方面,一个 AppService 应该 而不是 被另一个 AppService 调用。

参见: