public class ProjectType : Entity
{
public ProjectType(Guid id,string name)
{
Id=id;
Name=name;
}
public virtual string Id {get;private set;}
public virtual string Name {get;private set;}
}
public class Project : Entity
{
public Project(Guid id, ProjectType projectType)
{
Id = id;
ProjectType = projectType;
}
private IList<Task> _tasks = new List<Task>();
public ProjectType {get;private set;}
public IEnumerable<Task> Tasks
{
get{
return _tasks;
}
}
public void AddTask(Task task)
{
// some business logic for this.ProjectType
task.SetProject(this);
_tasks.Add(task);
}
public void RemoveTask(Task task)
{
_tasks.Remove(task);
}
}
public class Task : Entity
{
public Task(Guid taskId,Project project)
{
Id = taskId,
Project = project;
}
public Project Project {get;private set;}
public Task ParentTask {get;private set;}
private IList<Task> _subTasks = new List<Task>();
public IEnumerable<Task> SubTasks
{
get{
return _subTasks;
}
}
public void AddSubTask(Task task)
{
// some business logic for Project.ProjectType
task.SetProject(this.Project);
task.ParentTask = this;
_subTasks.Add(task);
}
public void RemoveSubTask(Task task)
{
_subTasks.Remove(task);
}
internal void SetProject(Project project)
{
Project = project;
}
}
내 질문 :DDD, 집계 루트 디자인
- 이 프로젝트 집계 루트인가?
- 작업 집계 루트입니까?
- AddTask, RemoveTask를 프로젝트에 포함해야합니까?
- AddSubTask, RemoveSubTask가 작업에 속해야합니까?
나는이 라인을 이해하지 못한다 : "프로젝트 관리자와 같은 한 명의 사용자 만 있다면 이것은 괜찮은 일이다.하지만 많은 사용자 (예 : 할당 된 사람)가 자신의 작업을 수정하려고 할 때 이것은 자주 발생하는 동시 발생을 야기 할 수있다. 응용 프로그램을 사용할 수 없게 만듭니다. " – oguzh4n
@ oguzh4n 죄송합니다, 저의 가난한 영어 :(내 업데이 트를 보시고 Vernon의 기사에서 작은 집계 장을 가져올 수 있습니다. (링크 참조) – Hippoom
감사합니다. 동시에 많은 사용자와 함께 작업을 편집 할 수 있습니다. 힌트 : 낙관적 인 동시성을 사용하지만 "동시성 (concurrency)"이란 말은 동시성 문제를 어떻게 해결할 수 있습니까? – oguzh4n