Я не человек PHP, но на других платформах, таких как .NET, вы можете сделать классы DL и классы BL живыми в одной сборке (библиотеке) с классами DL, помеченными как «внутренние» для сборки (не могу быть доступным для других сборок). Это что-то достижимое в PHP?
Как правило, я бы не стал этого делать. Я хотел бы иметь одну библиотеку BL и одну библиотеку DL и просто сообщить, что библиотека DL не должна использоваться никаким кодом, кроме кода в библиотеке BL. По моему опыту, этот подход работает даже в команде из 10 и более человек. Если ваши библиотеки BL действительно инкапсулируют логику многократного использования, что делает их более удобными для использования классами, чем классы DL напрямую, вы должны увидеть, как ваши одноранговые разработчики используют их в пользу классов DL. Неправильное прямое использование классов DL должно быть выявлено либо в результате рецензирования кода, либо неудачных юнит-тестов и / или интеграционных тестов Фактически, последнее всегда должно выявлять любые сбои в бизнес-логике в коде потребления BL / DL из-за обхода обязательных правил бизнес-логики, которые содержатся на уровне BL. Я предполагаю, что на самом деле я, как разработчик DL / BL, должен просто кодировать эти классы соответствующим образом, не заботясь об их наглядности, и безопасно полагаться на другие механизмы, чтобы выявить недостатки в любом потенциально потребляющем коде, что должно иметь место. если ваш проект имеет хорошую политику тестирования и проверки кода.
Примечание: просто для полноты, в .NET также возможно иметь отдельные библиотеки BL и DL, с классами DL, помеченными как внутренние, и библиотекой BL, помеченной как «дружественная» сборка библиотеки DL, что позволяет BL библиотека для доступа к внутренним членам DL. Другие библиотеки не будут помечены как друзья и, следовательно, не смогут получить доступ к внутренним членам DL. Опять же, я не уверен, возможно ли что-либо подобное в PHP.