Как реализовать Многоуровневую архитектуру в PHP


Я определил ниже слои, которые будут реализованы в моем приложении. Насколько мне известно, многоуровневая архитектура предпочтительнее для корпоративного приложения.

  • Уровень представления
  • Бизнес-уровень
  • Уровень доступа к данным
  • Уровень обслуживания

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

  • Уровень представления => Контроллер и представления
  • Бизнес-уровень, Уровень обслуживания =>Модель
  • Уровень доступа к данным => Также модель, но используется доктрина.

Модель состоит из Бизнес-уровня, Уровня доступа к данным, Уровня обслуживания. Смотрите изображение ниже, которое заимствовано из книги Мартина Фаулера Шаблоны архитектуры корпоративных приложений.

Diagram of service layer, with concentric circles

Моя проблема в том,

Есть ли способ разделить модель на отдельный бизнес-уровень, доступ к данным Слой, Слой Обслуживания? Как реализовать многоуровневую архитектуру в PHP? Должен ли я использовать какой-либо другой фреймворк (если только он поддерживает многоуровневую архитектуру)?

Обновление

Ссылка ниже была полезной

Как должна быть структурирована модель в MVC?

Как построить n-уровневую веб-архитектуру с помощью PHP?

В чем разница разработки веб-сайта в MVC и 3-уровневой или N-уровневой архитектуре?

Приложение MVC. Как это многоуровневая архитектура вписывается?

Реализация сервисного уровня в архитектуре MVC

Достижение 3-уровневой архитектуры с помощью Symfony PHP

Author: Community, 2013-09-11

1 answers

Если вы серьезно относитесь даже к попытке создать что-то, вдохновленное MVC, то ваши единственные варианты - Synfony и Zend. Остальные - просто грустные рельсы-клоны, которые реализуют некоторую ублюдочность PAC. И Sf2.x, кажется, лучше одного из двух... но это все равно, что указать на самого умного ребенка в коррекционном классе.
Если вы не можете и не хотите создать свой собственный фреймворк, Sf2.x будет вашим лучшим выбором.

Я думаю, что главная проблема здесь заключается в непонимание того, что такое "модель" в MVC. Модель - это слой, а не какой-либо конкретный класс или объект. На картинке из книги Фаулера " модель MVC" будет представлять собой все три концентрических круга, взятых вместе.

У вас в основном есть два основных слоя в MVC: слой модели и слой представления. Уровень представления взаимодействует с уровнем модели через сервисы, которые позволяют абстрагировать бизнес-логику лежащего в основе домена.

Не путайте его с " моделью предметной области ". Домен модель - это идея, которая описывает все знания и опыт бизнеса клиента, которые используются при создании приложения. Обычно он будет представлен в виде отдельных объектов домена и взаимодействия указанных объектов.

Кроме того, эта картина несколько вводит в заблуждение. Уровень абстракции данных (обычно реализуемый как набор сопоставителей данных) не является структурой более низкого уровня, чем модель предметной области. Как объекты домена, так и абстракции хранилища используются службой (либо напрямую, либо через репозитории и единицы работы). Это называется "логикой приложения" и является прямой обязанностью служб.

Итог: нет, вам не нужно выбирать какой-то другой фреймворк. Вам нужно только узнать больше об архитектуре приложений. Вам следует прочитать Шаблоны архитектуры корпоративных приложений .. это было бы хорошим началом.

Мои 2 цента

 13
Author: tereško, 2013-09-11 15:02:49