архитектура — Можете ли вы обеспечить соблюдение зависимостей архитектурного уровня в PHP?

Допустим, у меня есть простая, многоуровневая архитектура для приложения. Типичными уровнями могут быть (начиная снизу и продолжая наш путь вверх): ядро ​​/ утилиты, сущность / данные, бизнес-логика и пользовательский интерфейс. Зависимости между классами должны быть только в направлении «вниз», например. от пользовательского интерфейса до бизнес-логики, а не наоборот. Как бы я начал применять это в PHP? Могут ли IDE (такие как PHPStorm) сделать это? Может ли композитор сделать это?

Если бы я работал на Java, языке, с которым я более знаком, я бы обычно использовал Eclipse и Maven. Каждый слой будет отдельным проектом и создаст файл JAR. Слои будут зависеть друг от друга через путь к классам. Например, на уровне бизнес-логики (или проекта) будут доступны файлы JAR util и entity, а не пользовательский интерфейс. Если я по ошибке создал зависимость в направлении «вверх», IDE пометит ее как проблему, и код не будет компилироваться.

Я не смог найти способ добиться того же в PHP. Есть идеи?

2

Решение

Зависимости между классами должны быть только в направлении «вниз»,
например. от пользовательского интерфейса до бизнес-логики, а не наоборот.
Как бы я начал применять это в PHP? Могут ли IDE (такие как
PHPStorm) сделать это? Может ли композитор сделать это?

Вообще говоря, ответ — нет (или я не смог выяснить, как это сделать) … но возможно обеспечить надлежащее наслоение с помощью хорошей инженерной практики.

Например:

  • системный архитектор может обеспечить всю команду
    схема компонентов а также составная структурная схема
  • Системный архитектор может разделить весь проект на подпроекты и создать карту зависимостей для всего проекта. Мы используем composer и его composer.json. Например, наш слой данных объекта является именно таким подпроектом с полным набором картографов над нашими SOA Сервисы:)
  • системный архитектор может обеспечить проверку кода в каждой команде и между командами не только для общего владения кодом, но и для поддержки соответствующего уровня
  • обычно полезно использовать шаблонизатор для пользовательского интерфейса (добавляет строгость)
  • каждый член команды должен понимать основные концепции уменьшения сложности систем (может быть полезно показать им популярные и успешные инженерные системы, такие как модель сети OSI)

Вообще все в руках команды. Вот почему эта свобода PHP позволяет вам делать отличные вещи и полностью тратить. И было бы неплохо закончить этот ответ перефразировкой известной фразы:

С большой свободой приходит большая ответственность 🙂

1

Другие решения

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

1) Интерфейс с элементами HTML INPUT, которые получают / устанавливают свой контент в базу данных через классы второго уровня.

1.1) Более сложный пользовательский интерфейс элементов класса PHP, таких как VECTOR, SELECT и GRID, которые позволяют выбрать одну запись базы данных из списка, представленного на этих элементах.

2) PHP-классы, которые определяют атрибуты данных и запросы SQL. Этот уровень реализует базовые методы класса FIND, INSERT, ALTER и DELETE для отправки / получения данных с использованием SQL-запросов в / из доступа к базе данных следующего уровня. На этом уровне классы обычно называются в таблице базы данных, а атрибуты — в полях таблиц базы данных, к которым они будут иметь доступ.

3) Класс базы данных с конкретными командами бренда базы данных, такими как MySQL и Oracle, например. Этот уровень может быть выполнен классом со всеми командами для всех баз данных или одним классом для каждой базы данных. Если ваша система работает только с одной базой данных, вы можете сообщить классу верхнего уровня (2) и решить, какой класс базы данных вызывать. Но если вам нужно получить доступ к нескольким базам данных в одном приложении или вам нужно часто менять базу данных, лучше иметь только один класс со всеми командами. Если класс на этом уровне имеет доступ только к одной базе данных, он получает имя в базе данных.

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

[] S

0

По вопросам рекламы [email protected]