2009-09-18 5 views
0

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

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

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

Спасибо.

ответ

1

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

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

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

1

Я думаю, что вы хотите шаблон наблюдателя - но посмотрите на этот предыдущий переполнение стека вопрос Should I use a Listener or Observer?

+0

Привет jskaggz, это будет полезно для части пользовательского интерфейса, однако я надеялся на некоторое руководство по общему подходу к решению. – cheesysam

+0

Моя вина, я думал, что вы просите указать на правильный рисунок. : -P Вырезание в погоню, если вы используете java, получите застекленные списки (http://www.glazedlists.com/), который реализует шаблон наблюдателя – Jubal

1

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

2

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

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. 
} 
+0

В настоящее время класс Tasklist хранит ArrayList объектов типа «Задача». Вы думаете, что делать это в таблице предпочтительнее? – cheesysam

+0

Это подход, который я обычно предпринимаю с такой проблемой, где каждая строка в таблице соответствует бизнес-объекту, и каждый столбец является одним из атрибутов бизнес-объекта. Я бы держался подальше от JList; API отстой, и вы всегда можете имитировать его с помощью одного столбца JTable. – Adamski

-1

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

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

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

  1. Ajax (потоки данных назад и вперед от переднего конца к фоновым)
  2. Углового JS использования может использовать обещание или простой $ HTTP, или что-то, как просто как ng-повторить.
  3. HTML5 - есть что-то, как динамическое dataListControl

В серверных вероятных подходах модель

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

Как ваши искали основное направление это могло бы помочь

  1. https://martinfowler.com/aboutMe.html
  2. эффективной Java-2-го Joshua-Блоха
  3. Глава Первые книги

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

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

С Днем проектирования до то :)

+0

Привет Arvind. Игнорируя, что я спросил об этом в 2009 году! Вы ответили на вопрос, полностью запутывающий Java, о котором идет речь, и JavaScript, который не может быть более разным! И почему вы включили ссылку на Мартина Фаулерса о моей странице, которую я не знаю. – cheesysam

Смежные вопросы