我有三個簡單的類來說明。人們有很多項目有許多任務。這些課程應該如何分配責任?
public class Person {
private ArrayList<Project> projects;
public Person() {
projects = new ArrayList<Project>();
}
public printTasks() {
//TODO
}
}
public class Project {
private String name;
private ArrayList<Task> tasks;
public Project(String name) {
this.name = name;
tasks = new ArrayList<Task>();
}
public getName() {
return name;
}
}
public class Task {
private String name;
private String description;
public Task() {
tasks = new ArrayList<Task>();
}
public getName() {
return name;
}
public getDescription() {
return description;
}
}
我的問題涉及到什麼是執行Person.printTasks()..我想標準輸出項目名稱的人都有一個清單,每個項目後顯示上的一個列表的最佳方式任務名稱+項目描述。
- 創建Task.printTask()並打印出該任務的名稱和描述。創建Project.printTasks()並打印出項目名稱,然後在每個任務上調用printTask。讓Person.printTasks在每個項目上調用printTasks。
- 創建Task.getTaskString()並讓它連接該任務的名稱和描述並返回它。創建Project.getTasksString()並創建一個包含項目名稱的字符串,然後在每個任務上調用getTaskString,並將每個結果連接起來。讓Person.printTasks()在每個項目上調用getTasksString並打印出每個字符串。
- 創建Project.getTasks()並讓它返回任務的ArrayList。讓Person.printTasks()爲每個項目調用Project.getName和Project.getTasks(),打印項目名稱,然後遍歷返回的任務數組,分別調用getName()和getDescription()並將其打印出來。
有沒有最好的方法來處理這個問題還是它真的沒有關係?就我個人而言,我傾向於2),因爲1)將應該如何顯示對象的想法與該對象聯繫起來,但是感覺這應該在單個地方即Person中進行決定。這樣我可以輕鬆地從標準輸出更改爲文件。 3)讓Person直接訪問Task,這是一個以前沒有耦合到的類(至少它只是通過Project間接耦合)。
有沒有比這3更好的解決方案?
注:這可能是一個語言無關的問題,但我碰巧用Java編寫和我想象中有很好的可能是不同的語言不同的最佳解決方案,所以我想答案至少地址關於Java的這個問題。