在我的项目中,有一个概念是用户A向用户B发送FriendRequest
。在简化版本中,请求如下所示:
class FriendRequest
{
long Id;
int UserId;
int OtherUserId;
string Message;
}
在Accept
方法中,我需要检查当前经过身份验证的用户是否等于OtherUserId
中的FriendRequest
。 currentAuthenticatedUserId
从控制器传递到应用程序服务。现在,问题在于我是应该在应用程序服务中还是在FriendRequest
聚合根目录中进行检查。
//In application service code:
if(currentAuthenticatedUserId !=friendRequest.OtherUserId)
{
throw new FriendRequestException("Can only accept friend requests sent to you");
}
friendRequest.Accept();
VS
//In application service, but we are not checking it here.
friendRequest.Accept(currentAuthenticatedUserId); //The check is done inside `FriendRequest` and the exception is also thrown there.
答案 0 :(得分:4)
访问控制是应用程序服务的主要职责之一。
因此,请检查应用服务中的用户ID,而不是实体中的用户ID。
答案 1 :(得分:1)
friendRequest.Accept(...)
域名中的含义是什么?请求接受自己或接受什么?我相信,你需要用更多与名词相关的动词扩展你无处不在的语言。
作为一个例子,我可能会想到“一个人可以接受由另一个人发送的朋友请求”。在这种情况下,您将拥有person.Accept(friendRequest)
。然后,服务职责是根据当前的身份验证详细信息获取Person
。