Интерфейс между «моделью» и «представлением» - PullRequest
1 голос
/ 20 марта 2011

У программы есть представление и модель (с условным обозначением), в которой представление наблюдает за моделью. Модель имеет несколько состояний, а представление имеет несколько jpanels, которые отображаются на состояния (в некоторых состояниях имеется несколько соответствующих jpanels за штуку). При использовании карты-раскладки отображается только одна j-панель, а изменение или изменение состояния внутри этой области заменяет текущую j-панель на другую. Pr ogra m работает, но для представления и модели кажется плохой практикой предполагать, что существует ровно 5 состояний и 7 представлений. Как это может быть реализовано.

<code>
class Model implements Observable {
  State A, B, C;
  final int VIEW_A = 0, VIEW_B = 1, VIEW_C0 = 2, VIEW_C1 = 3; 
  int stateView;</p>

<p>//argument will be one of the final ints above
  void setStateView(int stateView) { 
    this.stateView = stateView;
    notifyObservers();
  }</p>

<p>void getStateView() { return stateView; }
}</p>

<p>class View implements Observer {
  void update(Observable o) {
    //will use one of the ints above to identify the correct jPanel to display
    setJPanel ( o.getStateView() ); 
  }
}

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

Ответы [ 2 ]

1 голос
/ 20 марта 2011

Несколько вещей:

  1. Используя model для поддержания состояния, вы правильно используете шаблон проектирования MVC.

  2. Если предположить, что есть только 5 состояний, то, конечно, все в порядке , если есть только 5 состояний .Я не согласен с другой практикой, которую вы используете.Вместо использования набора final int объявлений я бы определил enum, который представляет ваше состояние.Я думаю, что это может быть основной причиной того, что вы считаете вашу программу ужасной.Это, на мой взгляд, и ваше решение не использовать enum является причиной.

  3. Этот дизайн не очень расширяемый.Что если вам в конечном итоге понадобится 147 штатов?Об этом стоит подумать.Одним из вариантов является использование чего-то кроме одного целого числа в качестве дескриптора состояния.Поскольку я не знаю, что вы разрабатываете, мне трудно дать хорошие предложения по этому вопросу.

Редактировать: чтобы ответить на другой опубликованный ответ, предлагающий использование шаблона Посредника:Я думаю, что это слишком для этого простого приложения.Ваша модель прямолинейна, а поддержание состояний не слишком сложное.Дизайн важен, но чрезмерное использование вашего дизайна может также привести к подводным камням.

Удачи,

-tjw

1 голос
/ 20 марта 2011

Вставьте класс посередине с исключительной ответственностью отображения состояния для просмотра. Пусть этот класс реагирует на изменения состояния, сообщая представлению, какую панель показывать. Это сохраняет логику отображения в одном месте - модель ничего не знает о представлениях, а представление ничего не знает о состояниях. Это вариант шаблона Mediator .

...