Собственно решил остановиться на такой вот структуре:
http://upwap.ru/1944260
Опишу каждый элемент отдельно.
Предстваление и модель визуализации.
Представим что мы работаем с таблицей, которую можно сортировать, добавлять в нее записи и удалять их. Вся эта таблица хранится в модели визуализации, а представление лишь отвечает за ее отображение пользователю. При этом ни представление, ни модель визуализации друг о друге не знают, а взаимодействуют на уровне событий, генерируемых пользователем.
Плюсы этого подхода:
1) Можно без проблем заменить одно представление другим, достаточно лишь изменить событийные связи (а иногда и без этого можно обойтись). На пример смена дизайна сайта или метода отображения таблицы.
2) Данные могут быть обработаны без обращения к серверу. Так, сортировка таблицы не требует обращения к серверу, потому что это может быть выполнено самим JS в модели представления.
3) Модель представления так же может быть легко заменена на другую.
4) Визуализаций для одной модели представления может быть множество, на пример представление таблицы в форме таблицы и одновременно диаграммы.
Ресурс.
Модуль выполняющий определенные задачи в системе. На пример полноценный модуль гостевой книги, который может взаимодейтсвовать с БД используя собственные классы или сторонние бибилиотеки. Единственно требование для ресурсов, это то, что для него должен быть реализован контроллер ресурса. То есть класс, который реализует интерфейс класса ресурсов (о классе ресурсов расскажу дальше) и управляет всем ресурсом по средствам обращения к этому интерфейсу.
Важно понимать, что ресурсами могут быть только такие модули, которые не генерируют страницу по средствам echo, а используют более кашерные методы (речь как ни как идет о асинхронном взаимодействии с сервером). Если любой написанный вами модуль имеет контроллер (не сложно дописать) и не генерирует страницы, то его можно использовать в моей структуре.
Центральный контроллер и унифицированный интерфейс класса ресурсов.
Центральный контроллер принимает команды от визуальной модели и направляет их соответствующему контроллеру ресурсов. Для решения этой задачи он должен знать:
1) Какой интерфейс имеет контроллер ресурса
2) Где находится контроллер ресурса
Для решения первой задачи и используется унифицированный интерфейс класса ресурсов. На пример класс ресурсов "Гостевая книга" это все возможные гостевые книги. Этот интерфейс содержит основные опреации, такие как добавление сообщения, удаление онного и его редактирование.
Для простой замены одного ресурса другим (одна гостевая книга заменяется другой) необходимо чтобы их контроллеры реализовывали интерфейс класса ресурсов "Гостевая книга" (ведь центральный контроллер не должен зависить от конкретной реализации гостевой книги).