Минимальный набор

Определение круга задач

Я проектирую набор базовых классов для веб-приложений. Во многом выбор решений происходит интуитивно. Как мне кажется, минимально необходимый набор должен быть таким:

Реализация

Перечисленные задачи видятся мне настолько обязательными и взаимосвязанными, что не имеет смысла разносить их по отдельным файлам и даже по отдельным классам. За них отвечает "главный класс приложения", который и назовём "фреймворк".

Фреймворк даёт нам платформу для разработки и модульного тестирования других классов.

Задачи "второго круга"

Следующий набор классов тоже почти обязателен, но реализован он может быть по-разному под конкретные задачи. Поэтому его классы не входят в состав фреймворка, а предлагаются как расширения.

Например "кеш" — фактически обязательный атрибут веб-приложения. А реализовываться он может как на базе файлов, так и на одном из движков ключ-значение, например memcache.

Второй круг классов:

В составе фреймворка будут интерфейсы для этих классов, а в демонстрационных примерах варианты их реализации.