Появилось свободное время, посему постараюсь описать в двух словах CMF так, как вижу ее я.
Как я уже писал выше, CMF разрабатывается на основе MVC model 2 паттерна, что подразумевает выделение трех слоев: модели, представления и контроллера. Реализация модели т.е. бизнес логики может быть произвольная т.к. доменные объекты должны быть отделены от преставления и контроллера. CMF не должна накладывать никаких ограничений на реализацию преставления: может использоваться как один из шаблонизаторов типа Template Toolkit или HTML::Template, embeded-технология вроде Mason, так и xml + xlst.
Для реализации контроллера применятся паттерн Front Controller, который состоит из самого обработчика и команд. Для маппинга (связи между url и соответствующими командами) используется глобальный для всего проекта xml-конфигурационный файл. Пример (упрощен для понимания):
Все запросы проходят через контроллер (я для этих целей использую mod_rewrite), который выполняет следующие действия:
1. Считывает глобальный для всего проекта конфигурационный файл.
2. Создает экземпляры объектов классов Request, Displayer, Response, Context.
3. Используя методы созданных классов, парсит запрос и определяет table и action, сохраняет параметры post, get и т.д.
4. Парсит xml конфигурационный файл и на основе table и action находит информацию о соответствующем классе-команде.
5. Создает экземпляр объекта класса-команды и вызывает методы execute созданного объекта. Класс-команда может создавать и манипулировать доменными объектами, регистрировать данные, которые будут доступные во View и т.д. Класс-команда посредством специального метода должен определить, какой view будет работать после его завершения.
6. Управление передается объекту класса Displayer, который, на основе данных установленных командой, получает нужные шаблоны, процессит их и пишет результат в Response.
7. Выводит данные пользователю.
Response похож по функциональности на соответствующий класс в Struts и php-mvc. Displayer является аналогом класса View в maypole и путем наследования и добавления функциональности может быть "прикручен" к любому шаблонизатору.
Помимо всего этого частью системы нужно сделать:
1. Механизм валидации параметров и вывода пользовательских ошибок. Я уже сделал подобный механизм на основе правил.
2. Хранилище сообщений и языковых настроек и поддержка многоязычности.
3. CRUD класс, который будет базовым для всех простых классов модели.
4. Набор common классов-команд таких как Add, Delete, Create, View, с возможностью конфигурирования посредством xml-конифга.
И много-много мелочей, вроде системы обработки ошибок, логирования и пр.
Многое из описанного выше уже готово и если кто-нибудь захочет принять участие в разработке, с радостью покажу код - это будет лучшим описанием.