Как реализовать Многоуровневую архитектуру в PHP
Я определил ниже слои, которые будут реализованы в моем приложении. Насколько мне известно, многоуровневая архитектура предпочтительнее для корпоративного приложения.
- Уровень представления
- Бизнес-уровень
- Уровень доступа к данным
- Уровень обслуживания
Я выбрал Symfony2 в качестве фреймворка для использования в приложении. В Symfony2 встроена архитектура MVC. И вышеперечисленные слои существуют, как показано ниже.
- Уровень представления => Контроллер и представления
- Бизнес-уровень, Уровень обслуживания =>Модель
- Уровень доступа к данным => Также модель, но используется доктрина.
Модель состоит из Бизнес-уровня, Уровня доступа к данным, Уровня обслуживания. Смотрите изображение ниже, которое заимствовано из книги Мартина Фаулера Шаблоны архитектуры корпоративных приложений.
Моя проблема в том,
Есть ли способ разделить модель на отдельный бизнес-уровень, доступ к данным Слой, Слой Обслуживания? Как реализовать многоуровневую архитектуру в PHP? Должен ли я использовать какой-либо другой фреймворк (если только он поддерживает многоуровневую архитектуру)?
Обновление
Ссылка ниже была полезной
Как должна быть структурирована модель в MVC?
Как построить n-уровневую веб-архитектуру с помощью PHP?
В чем разница разработки веб-сайта в MVC и 3-уровневой или N-уровневой архитектуре?
Приложение MVC. Как это многоуровневая архитектура вписывается?
1 answers
Если вы серьезно относитесь даже к попытке создать что-то, вдохновленное MVC, то ваши единственные варианты - Synfony и Zend. Остальные - просто грустные рельсы-клоны, которые реализуют некоторую ублюдочность PAC. И Sf2.x, кажется, лучше одного из двух... но это все равно, что указать на самого умного ребенка в коррекционном классе.
Если вы не можете и не хотите создать свой собственный фреймворк, Sf2.x будет вашим лучшим выбором.
Я думаю, что главная проблема здесь заключается в непонимание того, что такое "модель" в MVC. Модель - это слой, а не какой-либо конкретный класс или объект. На картинке из книги Фаулера " модель MVC" будет представлять собой все три концентрических круга, взятых вместе.
У вас в основном есть два основных слоя в MVC: слой модели и слой представления. Уровень представления взаимодействует с уровнем модели через сервисы, которые позволяют абстрагировать бизнес-логику лежащего в основе домена.
Не путайте его с " моделью предметной области ". Домен модель - это идея, которая описывает все знания и опыт бизнеса клиента, которые используются при создании приложения. Обычно он будет представлен в виде отдельных объектов домена и взаимодействия указанных объектов.
Кроме того, эта картина несколько вводит в заблуждение. Уровень абстракции данных (обычно реализуемый как набор сопоставителей данных) не является структурой более низкого уровня, чем модель предметной области. Как объекты домена, так и абстракции хранилища используются службой (либо напрямую, либо через репозитории и единицы работы). Это называется "логикой приложения" и является прямой обязанностью служб.
Итог: нет, вам не нужно выбирать какой-то другой фреймворк. Вам нужно только узнать больше об архитектуре приложений. Вам следует прочитать Шаблоны архитектуры корпоративных приложений .. это было бы хорошим началом.
Мои 2 цента