Какой шаблон проектирования я должен использовать для списка TODO в Java? - PullRequest
0 голосов
/ 18 сентября 2009

Какой шаблон проектирования я должен использовать для очень простого объектно-ориентированного списка задач?

Изначально я начал с классов для Task, TaskList, Driver. Также простой пользовательский интерфейс, отображающий список названий задач. Я боролся за то, чтобы пользовательский интерфейс обновлял список при добавлении новых задач, и, пытаясь решить эту проблему, я понял, что весь мой макет, вероятно, был неправильным.

Я ищу кого-то, чтобы дать мне основное руководство или, возможно, ссылку на диаграмму шаблонов проектирования с небольшим руководством о том, как мои классы относятся к диаграмме.

Спасибо.

Ответы [ 5 ]

2 голосов
/ 18 сентября 2009

Еще один совет: если вы пишете свой пользовательский интерфейс на Swing, не не используйте DefaultTableModel и не копируйте Task s из вашего TaskList в модель (т.е. не держите свой данные в двух местах). Вместо этого, подкласс AbstractTableModel и пусть он действует как тонкая оболочка вокруг TaskList; например, * +1008 *

public class TaskTableModel extends AbstractTableModel {
  private final TaskList taskList;  

  public TaskTableModel(TaskList taskList) {
    this.taskList = taskList;
  }

  public Object getValueAt(int row, int column) {
    Task task = taskList.getTask(row);
    Object ret;

    switch(column) {
      case 0:
        ret = task.getStartTime();
        break;
      case 1:
        ret = task.getState();
        break;
        // etc ...
    }

    return ret;
  }

  // TODO: Implement other TableModel methods.
}
1 голос
/ 18 сентября 2009

Общая архитектура должна реализовывать шаблон Model-View-Controller (MVC) (или Model-View-Presenter с более сильным разделением модели и вида), и, похоже, вы уже начали с этого. У вас есть классы, которые представляют «задачу» и «список задач», и у вас есть пользовательский интерфейс для представления списка задач (модели) пользователю. Теперь вам нужен интерфейс (или набор интерфейсов) для модели и пользовательского интерфейса, и вы хотите убедиться, что модель не знает пользовательский интерфейс и пользовательский интерфейс не знает модель.

Поскольку между ними у вас есть класс (ы) докладчика, который будет реагировать на изменения модели и события пользовательского интерфейса (шаблон наблюдателя, привязка данных в качестве метода). Он может слушать модель и обновлять вид. Итак, вы хотите, чтобы ваша модель наблюдалась. Кроме того, он может прослушивать события из представления (редактирование значений, действия) и передавать эту информацию в модель, чтобы он мог (попытаться) адаптировать изменения, предусмотренные пользователем (модель и только модель будут проверять вводимые пользователем данные и давать ответ докладчику).

Да, это довольно сложно. Для начала разбейте ваше приложение на три части (модель, представление, контроллер / презентатор) и сделайте модель наблюдаемой. Таким образом, вы можете легко начать с представления, которое автоматически обновляется при изменении модели. И затем, шаг за шагом, вы можете добавить функциональность для реагирования на пользовательский ввод в пользовательском интерфейсе.

1 голос
/ 18 сентября 2009

Модель-Вид-Контроллер (MVC). По сути, Модель хранит задачу, Контроллер обрабатывает события, а Просмотр - отображение. Вы можете иметь несколько представлений, то есть одно для отображения задач в пользовательском интерфейсе, а другое для сохранения на диск.

1 голос
/ 18 сентября 2009

Я думаю, вам нужен шаблон наблюдателя - но взгляните на этот предыдущий вопрос о переполнении стека Стоит ли использовать слушателя или наблюдателя?

0 голосов
/ 05 мая 2017

Трудно понять ваш дизайн без какого-либо кода или схемы, но я попробую

Зависит от вашей конкретной ситуации, обновляется ли список в back-end (База данных / контроллер) и отражается в front-end (View-html5, angularJs) или наоборот. или же это может произойти в любом из мест или , где вы хотите применить исправление (front-end / Back-end), учитывайте все взаимодействия при применении исправления.

В вероятных подходах переднего конца

  1. Ajax (данные передаются от внешнего интерфейса к внутреннему и обратно)
  2. Angular js use может использовать обещание или простой $ http, или что-то такое же простое, как ng-repeat.
  3. HTML5 - есть что-то динамическое dataListControl

На внутренних подходах

  1. Шаблон наблюдателя
  2. Вся архитектура, на которую вы можете пойти, вплоть до архитектуры, управляемой событиями https://martinfowler.com/articles/201701-event-driven.html как вы почувствовали, что ваш прав был не с нуля.

Поскольку вы искали основное направление, это может помочь

  1. https://martinfowler.com/aboutMe.html
  2. Effective-Java-второй-Joshua-Bloch
  3. Head First Books

2 цента - используйте некоторые фреймворки, которые облегчат жизнь, если вы начинаете путешествие по дизайну.

Использование каркасов, скажем, SPRING заставляет вас использовать множество шаблонов, даже не зная их, таких как MVC, Front Controller, AOP, Singleton (бины), Template (JDBC, JpaTemplate) и т. Д.

Happy Designing до тех пор:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...