Допустим, у меня есть простая, многоуровневая архитектура для приложения. Типичными уровнями могут быть (начиная снизу и продолжая наш путь вверх): ядро / утилиты, сущность / данные, бизнес-логика и пользовательский интерфейс. Зависимости между классами должны быть только в направлении «вниз», например. от пользовательского интерфейса до бизнес-логики, а не наоборот. Как бы я начал применять это в PHP? Могут ли IDE (такие как PHPStorm) сделать это? Может ли композитор сделать это?
Если бы я работал на Java, языке, с которым я более знаком, я бы обычно использовал Eclipse и Maven. Каждый слой будет отдельным проектом и создаст файл JAR. Слои будут зависеть друг от друга через путь к классам. Например, на уровне бизнес-логики (или проекта) будут доступны файлы JAR util и entity, а не пользовательский интерфейс. Если я по ошибке создал зависимость в направлении «вверх», IDE пометит ее как проблему, и код не будет компилироваться.
Я не смог найти способ добиться того же в PHP. Есть идеи?
Зависимости между классами должны быть только в направлении «вниз»,
например. от пользовательского интерфейса до бизнес-логики, а не наоборот.
Как бы я начал применять это в PHP? Могут ли IDE (такие как
PHPStorm) сделать это? Может ли композитор сделать это?
Вообще говоря, ответ — нет (или я не смог выяснить, как это сделать) … но возможно обеспечить надлежащее наслоение с помощью хорошей инженерной практики.
Например:
composer
и его composer.json. Например, наш слой данных объекта является именно таким подпроектом с полным набором картографов над нашими SOA Сервисы:)Вообще все в руках команды. Вот почему эта свобода PHP позволяет вам делать отличные вещи и полностью тратить. И было бы неплохо закончить этот ответ перефразировкой известной фразы:
С большой свободой приходит большая ответственность 🙂
Дело в том, чтобы обеспечить разделение того, что каждый слой должен знать и делать, что я называю ответственностью. Каждый уровень должен нести ответственность за то, что он должен делать, без какого-либо одного уровня, зная, как это делают другие.
Моя простая архитектура имеет:
1) Интерфейс с элементами HTML INPUT, которые получают / устанавливают свой контент в базу данных через классы второго уровня.
1.1) Более сложный пользовательский интерфейс элементов класса PHP, таких как VECTOR, SELECT и GRID, которые позволяют выбрать одну запись базы данных из списка, представленного на этих элементах.
2) PHP-классы, которые определяют атрибуты данных и запросы SQL. Этот уровень реализует базовые методы класса FIND, INSERT, ALTER и DELETE для отправки / получения данных с использованием SQL-запросов в / из доступа к базе данных следующего уровня. На этом уровне классы обычно называются в таблице базы данных, а атрибуты — в полях таблиц базы данных, к которым они будут иметь доступ.
3) Класс базы данных с конкретными командами бренда базы данных, такими как MySQL и Oracle, например. Этот уровень может быть выполнен классом со всеми командами для всех баз данных или одним классом для каждой базы данных. Если ваша система работает только с одной базой данных, вы можете сообщить классу верхнего уровня (2) и решить, какой класс базы данных вызывать. Но если вам нужно получить доступ к нескольким базам данных в одном приложении или вам нужно часто менять базу данных, лучше иметь только один класс со всеми командами. Если класс на этом уровне имеет доступ только к одной базе данных, он получает имя в базе данных.
Как я задумал, несколько слоев обмениваются данными в обоих направлениях, получая данные настроек.
[] S