同时使用应用程序服务和管理器的目的是什么?

时间:2019-01-25 17:17:43

标签: asp.net domain-driven-design aspnetboilerplate application-design dddd

我不是经验丰富的程序员。我总是浏览源代码以学习一些东西。我最喜欢ASP.NET Boilerplate。昨天,我注意到有友谊应用程序服务(在服务/应用程序层)和友谊管理器(在业务/域层)。我不明白为什么会有友谊经理。友情服务还不够吗?

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);
}

1 个答案:

答案 0 :(得分:5)

摘自NLayer-Architecture上的文档:

  

应用程序层...执行请求的应用程序功能。它使用数据传输对象从表示层或分布式服务层获取数据并将数据返回到表示层或分布式服务层。 ...

     

域层...执行业务/域逻辑。 ...

这是在高级评论中的意思:

// 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中的关注点(以及所采取的措施)存在细微差别。

ManagerAppService,另一个Manager或代码的其他部分重用。

例如,IFriendshipManager可以用于:

  • ChatMessageManager
  • ProfileAppService
  • TenantDemoDataBuilder

另一方面,不应不要从另一个AppService调用AppService

请参阅:Should I be calling an AppService from another AppService?