3
我有這些實體什麼是在這種情況下
- 用戶
- 工作總結根 - 每一個任務必須有一個用戶分配
- 項目 - 任務可以被分配到一個項目,但它不是必要時,用戶必須被指定爲項目創建者
- TaskStatus - 每一個任務必須有一個狀態分配
,我設計了總RO OTS如下
總根
- 用戶與實體:任務,任務狀態
- 項目
我在正確的方向前進?
我有這些實體什麼是在這種情況下
,我設計了總RO OTS如下
總根
我在正確的方向前進?
是啊,聽起來很正確。這是我在C#中的即興創作:
//aggregate root
public class User{/*first name, last name, contacts, etc.*/}
//aggregate root
public class Project{
public IList Tasks{get; private set;}
public User CreatedBy{get; private set;}
public Project(User createdBy){
CreatedBy=createdBy;
}
public RegisterTask(string taskDescription, User assignedTo){
Tasks.Add(new Task(taskDescription, assignedTo));
}
public StartWorkOn(Task task){
if(!Tasks.Contains(task))
throw new Exception("Task is not registered");
task.StartWork();
}
}
//entity
public class Task{
public User AssignedTo{get;private set;}
public string Description{get; private set;}
public TaskStatus Status{get; private set;}
internal Task(string description, User assignedTo){
AssignedTo=assignedTo;
Description=description;
Status=TaskStatus.Pending;
}
internal void StartWork(){
if(Status!=TaskStatus.Pending)
throw new Exception("Can't start what's ongoing");
Status=TaskStatus.InProgress;
}
internal void Finish(){
if(Status!=TaskStatus.InProgress)
throw new Exception("Can't finish what has not started");
Status=TaskStatus.Finished;
}
}
//value object
public enum TaskStatus{ Pending, InProgress, Finished }
var me=new User();
_users.Save(me);
var you=new User();
_users.Save(you);
var project=new Project(me);
project.RegisterTask("Have a nice day!", you);
project.StartWorkOn(project.Tasks.First());
_projects.Save(project);
請記住 - 這只是一個草圖。不要太認真。
任務並不需要被分配到一個項目,但必須由用戶創建。因此,我選擇User作爲任務實體的AR,因爲任務不能在沒有用戶的情況下存在,但它可以在沒有項目的情況下存在。我在這裏嗎? – user137348 2011-01-23 21:09:01