Меня интересует общий подход к созданию интерактивного графического интерфейса с использованием MVC3.
Идея состоит в том, чтобы создать набор различных компонентов, которые могут быть интегрированы (подключены) в различные сценарии.
Каждый Компонент ДОЛЖЕН иметь свое собственное определение модели, контроллер и представления.
Компонент инкапсулирует не только представление, но и поведение через свой контроллер.
Все внутренние детали реализации, модель, поведение и т. Д. Должны находиться внутри компонента,
так что компонент становится независимым, модульным - черным ящиком.
Это позволяет компоненту быть измененным, не нарушая ничего в контексте, в котором компонент используется.
Контекст, в котором работает компонент, не должен делать никаких предположений о внутренних деталях реализации компонента.
С другой стороны, компонент не делает никаких предположений относительно контекста, в котором он будет использоваться.
Наконец, компонент должен предоставлять механизм для «общения» или «взаимодействия» с внешним миром. Помимо внутренних компонентов, компонент должен предоставлять некий «внешний» интерфейс (например, параметры, данные, функции, события и т. Д.), Который позволял бы интегрировать компонент в контекст выполнения.
Контекст (или сценарий) - это часть, которая содержит компоненты.
Теперь основной задачей для контекста является управление взаимодействием между компонентами.
Реальный мир Компонент категорий пример:
Компонент отображает список категорий и позволяет пользователю выполнять различные действия, такие как сортировка, разбиение по страницам и выбор записи.
Внутренне, у него есть своя собственная модель, которая хранит соответствующую информацию, такую как текущая страница, сортировка, выбор и т. Д ...
Внутри себя он реализует все необходимые действия (для базового рендеринга, для реакции пользователя и т. Д.) В своем собственном контроллере.
Внутренне он обрабатывает постоянство состояния модели в представлении и восстановление состояния модели в собственном контроллере.
Реальный мир Компонент продуктов пример:
Компонент отображает список продуктов и позволяет пользователю выполнять различные действия, такие как сортировка, разбиение по страницам и выбор записи.
Внутренне, у него есть своя собственная модель, которая хранит соответствующую информацию, такую как текущая страница, сортировка, выбор и т. Д ...
Внутри себя он реализует все необходимые действия (для базового рендеринга, для реакции пользователя и т. Д.) В своем собственном контроллере.
Внутренне он обрабатывает постоянство состояния модели в представлении и восстановление состояния модели в собственном контроллере.
Реальный Страница панели инструментов (контекст, сценарий) пример:
На странице отображаются компоненты категорий и продуктов.
Компонент «Продукты» отображает все продукты для выбранной в данный момент категории и, следовательно, должен предоставлять внешний интерфейс (параметр или что-то еще) для получения идентификатора выбранной категории из контекста.
Компонент категорий должен обеспечивать некоторый внешний интерфейс, чтобы контекст мог действовать при изменении выбранной категории и предоставлять идентификатор выбранной категории для компонента продуктов.
Технически, коммуникационный подход для обновления страницы в основном проходил бы через AJAX, но если это возможно без AJAX, было бы еще лучше.
В случае AJAX, я хотел бы решение, которое использует контроллер (ы) на стороне сервера, который решает и отображает то, что должно быть обновлено на клиенте (JSON или что-то).
Мне бы не понравилось решение в клиентском скрипте (клиентский «подобный» контроллер), который решает, какие действия вызывать и какие части страницы обновлять - это, как сказано в предыдущем абзаце, должно быть решено контроллеры на сервере.
Важно: Не обязательно, чтобы компоненты работали при непосредственном вызове по какому-либо маршруту.
Как бы вы вообще реализовали описанную систему?