Я бы взглянул на Symfony2 , Lithium и Zend Framework , я думаю, что они являются лучшими с точки зрения дизайна.Я бы посоветовал не использовать синглтоны и вместо этого использовать внедрение зависимостей.
Насколько важно, чтобы все базовые классы были расширяемыми и как это можно сделать?
Это действительно зависит от обязанностей классов.Возможно, вы не захотите, чтобы некоторые базовые компоненты в вашем стеке MVC были расширены (при условии, что это MVC), и вы могли бы объявить их как финальные или объявить определенные методы как финальные и принудительно расширять с помощью плагинов и помощников.Другие классы могут быть предназначены для расширения, и в этом случае они должны быть объявлены как абстрактные.
ИМО, вы должны в первую очередь использовать защищенные свойства и предоставлять методы доступа.Но не просто используйте защищенную видимость для всех ваших свойств, некоторые могут быть публичными и частными, опять же, все сводится к ответственности.
Все учитывают, какую ответственность несет класс, если он обслуживает несколькоРоли / цели, пришло время провести рефакторинг и разделить этот класс на слишком много классов.И не забывайте использовать интерфейсы!
Я на самом деле думаю, что пойти с открытым исходным кодом с ним и позволить другим чувствовать ту же радость, что и я;)
Перед тем как приступить к выпуску своего кода, примите во внимание следующее:
- Все ли мои модули кода протестированы?
- Используется ли контроль версий?
- Имеется ли у меня полная документация по API?
Я не хочу быть унылым, но если вы ответили «нет» на любой из этих вопросов, не беспокойтесь об открытом исходном коде вашего кода должным образом, потому что никто не будет его использовать.Может быть, просто начать использовать GitHub для SCM.Также учтите, что там уже есть куча первоклассных фреймворков, почему бы вместо них использовать ваши?
Также обязательно прочитайте Десять главных причин, почему я не буду использовать ваш проект с открытым исходным кодом .
... Я просто пытаюсь уберечь вас от необходимости вкладывать лишние ненужные усилия в ваш проект для публичного использования, когда вы все равно не получите никакой поддержки.