Существует ли объектно-ориентированная парадигма проектирования, которая допускает переменный графический интерфейс и модель данных?

Мой симулятор игры в кости раздражает меня несколькими способами, и все это связано с объектно-ориентированным дизайном:

  • выбор пользователем теста на кости влияет на то, что должно отображаться в интерфейсе пользователя, а также на то, что должно являться частью объекта, представляющего данные теста
  • выбор пользователем параметров теста влияет на то, что должно отображаться в пользовательском интерфейсе, а также на то, что должно являться частью объекта, представляющего данные теста

Другими словами, мой графический интерфейс является переменным, а моя модель данных - переменной - они оба зависят от ряда потенциальных условий, полученных при вводе данных от пользователя. Обычный метод, который я использовал для обработки изменений, - это переключатели и операторы if, но они запутанные, громоздкие и вложенные.

Существует ли объектно-ориентированная парадигма проектирования, которая допускает изменения в графическом интерфейсе и модели?

2 ответа

Решение

Как и в случае большинства проблем, решение заключается в добавлении большего количества слоев абстракции:)

Посмотрите на MVC, MVP и MVVM *. Это шаблоны, предназначенные для разделения обязанностей между пользовательским интерфейсом и данными. Поскольку вы хотите во время выполнения переключаться между моделями (данными) и пользовательским интерфейсом (представлением), вам может потребоваться создать дополнительную абстракцию, контракт, чтобы позволить любому представлению связываться с любыми (или определенным подмножеством) данными.

* Эта ссылка, безусловно, не единственный источник, но поиск в Интернете (и, конечно, переполнение стека) поможет вам разобраться с этими шаблонами.

Три самых популярных:

MVC, если веб MVP, если настольный MVVM

Я разместил об этом ранее и предоставил диаграммы: http://carnotaurus.tumblr.com/post/2748019388/visual-pattern-links

Я также предлагаю разделить DAL на две части, чтобы помочь в целях тестирования

Другие вопросы по тегам