Лучший способ организовать иерархию классов PHP

У меня есть несколько примитивных фреймворков, которые я использовал для большинства своих проектов, но мне пришла в голову общая проблема дизайна, которую я пока не смог решить. Для данного приложения я должен отделить структуру класса приложения от структуры фреймворка, или сборка поверх фреймворка не такая уж плохая вещь?

Например, скажем, у меня была платформа с базовым классом Controller и она была расширена для данной части моего приложения. Какое расположение имеет наибольшее значение и почему?

Структура класса A:

  • Интуитивно понятный, легко найти исходные файлы при отладке.
  • Именование файлов / структура каталогов отражает класс heirarchy.
- Framework_Control "Framework \ Control.php"
   - Framework_Control_Index "Framework \ Control \ Index.php"
   - Framework_Control_Home "Framework \ Control \ Home.php"
   - Framework_Control_Contact "Framework \ Control \ Contact.php"
   - Framework_Control_About "Framework \ Control \ About.php"

Структура класса B:

  • Держит основу модульной и легко заменить / обновить.
  • Добавляет некоторую сложность структуре каталогов, именование каталогов / файлов больше не следует за иерархией классов все время.
- Framework_Control "Framework \ Control.php"
   - Application_Control_Index "Application \ Control \ Index.php"
   - Application_Control_Home "Application \ Control \ Home.php"
   - Application_Control_Contact "Application \ Control \ Contact.php"
   - Application_Control_About "Application \ Control \ About.php"

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

2 ответа

Решение

На самом деле все сводится к тому, что вы собираетесь делать, когда обновляете Framework\Control.php в Application XYZ. Собираетесь ли вы вернуться в Application ABC и внести те же изменения? Что если это критическая ошибка?

Для удобства сопровождения всех ваших проектов я бы выбрал второй вариант.

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

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

Использование этого различия в нашей структуре кода значительно упростило повторное использование нашей внутренней структуры между несколькими сайтами.

В заключение вы могли бы рассмотреть, что делают основные фреймворки, такие как Zend Framework, Symfony и другие. Несмотря на то, что вся инфраструктура может быть больше, чем вы хотите, структура платформ может дать много общего с общими, хорошими практиками, которые используются разработчиками PHP повсюду.

Другие вопросы по тегам