在我尝试学习DDD的过程中,我遇到了一个简单的问题。 我有一个聚合根助手。 那个助理可以管理治疗师。
所以我有:
var assistant = GetAssistant(Id);
var therapist = new Therapist("john@doe.com");
assistant.Manage(therapist);
repository.Save(assistant);
业务规则规定,如果治疗师john@doe.com已由任何助理管理,则无法添加。
但据我所知,助理并不需要了解其他助手的治疗师。那么我怎样才能在DDD中做到这一点?
UDATE 治疗师是实体。 助理是实体。
助理必须是系统中的用户。 治疗师可能是系统中的用户。
治疗师有一个时间表和创建约会等,但也可以有一个助手为她/他工作。
作为用户,可以有助理管理其他治疗师(用户与否)。
因此,系统的输入是通过注册用户。 然后,您可以添加治疗师(您自己或其他人) 如果您为您管理添加另一位治疗师,我想确保: a)治疗师在系统中已不存在。
我想我的AR错了。但是,如果我的用户是AR,我面临同样的问题,用户如何知道系统中应该不知道的其他数据呢?
我真的很感谢你的帮助,我很难用这个来打击我。
答案 0 :(得分:1)
从实施的角度来看。您可以将代码编写为:
var assistant = GetAssistant(Id);
var therapist = GetTherapist("john@doe.com");
therapist.ManagedBy(assistant);
repository.Save(therapist);
治疗师知道他/她是否由助理管理,因此这里适用规则。治疗师可以使用锁来处理并发争用。
另一方面,治疗师可能尚不存在。我认为这更像是一个UI便利问题(找到或创建问题)。