同时使用 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.
// ...
}
请注意 AppService
和 Manager
中的关注点(和由此产生的操作)略有不同。
Manager
可以被 AppService
、另一个 Manager
或代码的其他部分重复使用。
例如,IFriendshipManager
可用于:
ChatMessageManager
ProfileAppService
TenantDemoDataBuilder
另一方面,一个 AppService
应该 而不是 被另一个 AppService
调用。
参见:
我不是一个有经验的程序员。我总是浏览源代码来学习一些东西。 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.
// ...
}
请注意 AppService
和 Manager
中的关注点(和由此产生的操作)略有不同。
Manager
可以被 AppService
、另一个 Manager
或代码的其他部分重复使用。
例如,IFriendshipManager
可用于:
ChatMessageManager
ProfileAppService
TenantDemoDataBuilder
另一方面,一个 AppService
应该 而不是 被另一个 AppService
调用。
参见: