У меня есть три простых класса для иллюстрации.У людей есть много проектов, у которых много задач.
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) связывает идею о том, как объект должен отображаться с этим объектом, но кажется, что это должно быть решено в одном месте, то есть личности.Таким образом, я могу легко перейти из стандартного вывода в файл, например.3) дает Лицу прямой доступ к Задаче, классу, с которым он ранее не был связан (по крайней мере, он был связан только косвенно через Проект).
Есть ли лучшее решение, чем эти 3?
Примечание: Это может быть не зависящий от языка вопрос, но я пишу на Java, и я думаю, что вполне могут быть разные лучшие решения для разных языков, поэтому я хотел бы получить ответы на вминимум решить эту проблему в отношении Java.