仍在尝试 DDD 并有一些疑问,也许有人会帮助我。
假设我有 2 个模型:
public class Event
{
User Creator;
List<User> Members;
}
public class User {}
我的问题是我看不到要实现的逻辑的位置。我需要 3 个动作:
- 用户加入活动
- 用户离开事件
- 创作者从活动中移除用户(只有创作者可以移除用户)
现在我刚刚创建了调用Event.RemoveUser/AddUser的域服务EventUserService和 ie。检查CurrentUser(由UserService提供)是否是事件的创建者(有权删除其他用户)。也许这种方法是可以的,但我仍然觉得我应该把这个逻辑放到聚合根中,即。:
- User.JoinEvent(Event) - 我可以基于某些逻辑将传递的事件添加到 User.Events 集合(双向)。
- User.LeaveEvent(Event) - 类似于 JoinEvent。
- User.RemoveUserFromEvent(User,Event) - 我可以在User中拥有CreatedEvents集合,对于该集合中的Event,我可以调用Event.RemoveUser(User) - 这样我将确保只有创建者才能踢某人。或者
- Evet.RemoveUser(UserToRemove) - 但我将如何确保它被创建者调用?
如果前两种方法看起来不错(至少对我而言),第三种方法将创建Event.RemoveUser(用于管理 Event 成员集合)方法,该方法可用于绕过User.RemoveUserFromEvent中的逻辑。
所以,最后我有两个问题:
- 在这样的情况下,您的方法是什么,其中两个聚合根一起工作并且一个操作由驻留在它们两者中的逻辑确定?也许像User.CanJoinEvent(Event)这样的方法?
- 如何创建像User.RemoveUserFromEvent这样的“危险”点
也许有人可以为我稍微说明一下,每一个帮助都会很好。