Мысли на тему: какой функционал включать в ядро.
Чем в моем понимании отличается встраивание в ядро от запуска в виде модуля? А тем что, если модуль включен в ядро, то не происходит проверка его наличия в системе.
Пример 1 : модуль рекламы. Основная функция -- это показ баннеров. Дополнительная -- узконаправленная реклама. Соотв., показ осуществляется в любом случае, а узконаправленная реклама возможна лишь при наличии функционала. Короче, модуль рекламы НЕ СМОЖЕТ работать без получения данных, например, т.е. в базовый функционал(в ядро) должен входить модуль получения данных(пусть будет БД). Проверка на наличие модуля "БД" НЕ ПРОВОДИТСЯ. А узконаправленная реклама возможна лишь при наличии модуля сбора статистики, и, если модуль присутствует в системе, то используются его методы, если же модуль отсутствует, модуль рекламы продолжает свою работу, теряя в функционале.
Из примера можно резюмировать, что модули можно разделить(в данном конкретном примере, исключая модули управления и т.п.) на обеспечивающие базовый функционал и расширяющие функционал. Конечно, от проекта к проекту набор модулей разниться. Но все же хотелось бы определить базовый функционал для проектов среднего уровня, корпоративных.
Мое мнение, базовый функционал:
1. Класс Модули(Подключени, инсталяция и т.д.). Должен быть в любом проекте, возможно, где-то можно урезать функционал, например, удалить установку новых модулей, если система того не требует.
2. Класс Файлы(Создание, запись, чтение и т.д.). Т.к. в почти на всех сайтах есть админка, можно вывести, что изменение конфигов через интерфейс требует операций над файлами.
3. Класс ДБ. Опять же почти все современные сайты завязанны на БД, => без этого класса тоже трудно.
4. Класс Валидатор. Конечно, для ну очень простого проекта можно написать очень простые ограничения в самом скрипте, но в Классе все уже отработанно и протестированно.
5. Класс Обработчик(Убираем кавычки, обрабытываем пере БД). Функционал(почти весь) данного класса можно реализовать с помощью стандартных функций, но централизация страдает. Во множестве случаев, кстати, мне приходилось писать обработчик в самом модуле, т.к. обработка требовалась уникальная.
Дополнительные модули, расширяющие функционал: статистика, обработчик ошибок, реклама и т.д.
Управляющие(+отвечающие за вывод, например, комментарии): форум, голосование, авторизация пользователей(НЕ СТАТИСТИКА) и т.д.
Что думаете о таком разделении?
П.С. Сейчас пишу CMF систему. Там из описанных мною модулей в ядро встроен только Класс Модули. Т.е. ядро -- это лишь среда для работы всех модулей. Система делиться на несколько уровней. От проекта к проекту можно варьировать наличие модулей, т.е. функционал. У каждого модуля есть ТРЕБОВАНИЯ, они деляться на обязательные, без которых модуль работать не будет, и желательные, бех которых функционал модуля уменьшается.