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);
}
}
Это нормально? Должен ли я перенести авторизацию на уровень обслуживания?
Вопрос Я изучаю [b]DDD[/b] в чистом виде и создаю приложение [b]Управление проектами[/b]. [list] [*][b]Агрегированный корень:[/b] Проект [*][b]Проект[/b] имеет [b]менеджера[/b] ([code]Employee[/code]) и список [b]задач[/b]. [*]Каждая [b]задача[/b] назначается [b]сотруднику[/b]. [*][b]Бизнес-правило:[/b] Только [b]менеджер проекта[/b] или [b]сотрудник, которому назначена задача[/b], может пометить ее как выполненную. [/list] Я пытаюсь решить, [b]где применить это правило[/b]. Мой текущий дизайн: [code]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 }