2011-01-20 173 views
3

我有這些實體什麼是在這種情況下

  • 用戶
  • 工作總結根 - 每一個任務必須有一個用戶分配
  • 項目 - 任務可以被分配到一個項目,但它不是必要時,用戶必須被指定爲項目創建者
  • TaskStatus - 每一個任務必須有一個狀態分配

,我設計了總RO OTS如下

總根

  • 用戶與實體:任務,任務狀態
  • 項目

我在正確的方向前進?

回答

1

是啊,聽起來很正確。這是我在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); 

請記住 - 這只是一個草圖。不要太認真。

+0

任務並不需要被分配到一個項目,但必須由用戶創建。因此,我選擇User作爲任務實體的AR,因爲任務不能在沒有用戶的情況下存在,但它可以在沒有項目的情況下存在。我在這裏嗎? – user137348 2011-01-23 21:09:01

相關問題