Применяя принцип SRP, вы должны иметь много классов. Если это хорошо подходит для небольшого проекта, как вы можете обрабатывать и организовывать количество классов в большом проекте?
Это относится ко всем типам библиотек. Не только СРП.
Организация классов / функций может быть головной болью, но на самом деле есть всего несколько вещей, которые вам нужно иметь в виду.
К 2 я имею в виду: /library/muscleGroup/useType_nameOfClass.php
для файлов / папок, где useType – это что-то вроде «заводского» «абстрактного» «data / dto» или любых других шаблонов, которые вы используете. Затем в каждом файле класс должен быть таким же, как nameOfClass, и каждое имя метода должно строго следовать шаблону. [Action][on what][with what conditions]
и сохранить список действий и «на что» и придерживаться их РЕЛИГИОЗНО.
Сделайте это, и вы не можете дублировать функциональность, так как вы можете легко найти нужные классы и методы для вещей, которые вы хотите. Поскольку у них есть логические имена, такие как Get_User_ById
и Get_Transactions_ByNewest
или Combine_Ingredients_FromRecipes
.
Этот последний может содержать комментарий выше:
// Combines many recipes into one ingredient list // $recipes = an array of recipe objects // returns an array of ingredient objects with their correct quantities
Список примеров действий: (должен быть довольно общим и применяться к любому приложению)
Список образцов «О том, что»: (должен быть конкретным приложением)
Зависит от проекта, но если это было что-то, что имеет много CRUD без значительных бизнес-правил, я бы хотел создать простую структуру с файлами скриптов для поддержки этого решения. Я делал это в прошлом, и он очень быстрый, но медленно меняющийся. Обычно Эрик Эванс называется анти-шаблоном Smart UI:
«Поместите всю бизнес-логику в пользовательский интерфейс, отбросьте приложение на небольшие функции и реализуйте их как отдельные пользовательские интерфейсы, внедряя в них бизнес-правила. Используйте реляционную базу данных как общий репозиторий данных. Используйте наиболее автоматизированное здание пользовательского интерфейса и инструменты визуального программирования [Evans с.77]. "
Если вы делаете что-то с большим количеством реальных бизнес-правил и имеете больше времени, или вы ожидаете, что он будет иметь долгую жизнь:
Что касается ресурсов, которые помогут вам в дальнейшем, ознакомьтесь с « Чистым кодом » Боба Мартина и Domain-Driven Design (не может опубликовать другую ссылку) Эриком Эвансом. Обе книги блестящие и предлагают тактические и стратегические шаги, соответственно, для решения этого хаоса.
Zend Framework организует свои классы по функциональности и называет их как таковые. Например, класс Zend_Controller_Action_Helper_AjaxContext
находится в /library/Zend/Controller/Action/Helper/AjaxContext.php
.
Это служит двум целям: организация папок и логическое разделение функциональности. Вы всегда сталкиваетесь с проблемой «запоминания того, что вы строите», но, применяя SRP и размещая функциональность, где она логически «самая правильная», вы можете сбить с толку.
При работе с множеством классов необходима интеллектуальная среда IDE. Ярлыки, которые позволяют разработчику быстро находить классы, имена файлов и методы в любом месте проекта, имеют дело с тысячами классов, почти тривиальными.
Используя тот же пример, что и выше, нужно уметь находить класс различными способами:
ctrl+shift+T
для поиска классов (типов). (примечание: я честно не знаю, является ли это особенностью затмения или добавлением плагинов PDT). ctrl+shift+R
(resource). ctrl+shift+m