MVC Controller включить отключить элементы управления - PullRequest
0 голосов
/ 22 декабря 2011

В моем приложении, которое находится на C ++, я использую MVC Pattern.У меня есть много объектов модели и список действий, которые можно выполнить с помощью пользовательского интерфейса.Но действия могут быть выполнены, только если выполнены некоторые условия:

  • Я не могу показать objectA, если показывается objectB или objectC,
  • и не может выполнять никаких действийдля объекта A, если он не отображается
  • другие более сложные условия

Поэтому я подумал о том, чтобы иметь класс, который будет проверять, если объекты определенного класса имеют допустимые действия в данный момент:

AActionValidator
{ 
 bool CanDoX();
 bool CanDoY();        

};
BActionValidator
{
  bool CanDoZ();
};

Классы Controllers спросят у ActionValidators, доступна ли какая-либо операция в определенный момент, и если да, они выполнят эту операцию.

Проблема 1: Но как автоматически отключить / включить элементы управления пользовательским интерфейсом, когда какое-либо действие становится доступным / недоступным?Я думаю, что эти классы ActionValidators также должны генерировать какое-то событие, когда это происходит?Но тогда мои элементы управления пользовательским интерфейсом должны подключаться к событиям разных классов ActionValidator

Проблема 2: Может быть, лучше иметь один глобальный класс ApplicationActionManager, который генерирует события и хранит информацию о допустимых действиях для всех объектов в приложении?Но я боюсь, что в конечном итоге он станет одним большим непоследовательным классом

Проблема 3: Когда ObjectA отображается, контроллер может также отключить кнопку Показать и включить кнопку Скрыть, потому что это простой случай, но это работа контроллера для обновления состояния управления?Или я должен выдавать состояние show / hidden также как событие?

Любое понимание того, как это можно сделать.Спасибо

1 Ответ

0 голосов
/ 22 декабря 2011

Я не уверен, что полностью понимаю, к чему вы клоните, но я постараюсь предложить несколько советов, которые уже делали подобные вещи с помощью инфраструктуры MVC.

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

Использование чисто виртуальных базовых классов может быть полезно науровень объекта.Например, имейте чисто виртуальную функцию CanDoAction (), которую должны реализовать все ваши объекты, тогда objectA может вернуть false, если она не видна.Затем вы можете использовать функцию проверки модели для реализации зависимостей между объектами, что должно дать вам некий иерархический процесс проверки.

Надеюсь, это имеет какой-то смысл.

...