Я изучаю DDD в чистом виде и создаю приложение Управление проектами.
- Агрегированный корень: Проект
- Проект имеет менеджера () и список задач.
Код: Выделить всё
Employee - Каждая задача назначается сотруднику.
- Бизнес-правило: Только менеджер проекта или сотрудник, которому назначена задача, может пометить ее как выполненную.
Код: Выделить всё
class Employee {}
class Task {
private Employee assignee;
public boolean isAssignedTo(Employee employee) {
return assignee.equals(employee);
}
public void complete(Employee employee) {
// mark task as completed
}
}
class Project {
private Employee manager;
private List tasks;
public boolean isManagedBy(Employee employee) {
return manager.equals(employee);
}
public Task getTask(UUID taskId) {
// fetch task by ID
}
public void completeTask(UUID taskId, Employee employee) {
Task task = getTask(taskId);
if (!isManagedBy(employee) && !task.isAssignedTo(employee)) {
throw new AuthorizationException("Only manager or assignee can complete the task");
}
task.complete(employee);
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -this-case