Парадигмы PHP

28.11.2019

Парадигма

Паради́гма — совокупность фундаментальных научных установок, представлений и терминов, принимаемая и разделяемая научным сообществом и объединяющая большинство его членов. Обеспечивает преемственность развития науки и научного творчества.

В данной статье будет только мое личное мнение на тему разных парадигм программирования, почему я использую термин "Парадигма" и что я лично в него вкладываю? Для меня "Парадигма" в программировании означает какой-то способ организации кода, который способствует улучшению кода, и упрощает решение задачи.

То есть парадигмой может быть и простое использование метода, либо использование какого-то паттерна программирования, либо использование какой-то важной концепции

Работа с данными

DTO объект

DTO объект расшифровывается как Data Transfer Object. Этот термин встречается в различной литературе по программированию, но исходя из моей практики на текущий момент этот механизм игнорируется программистами с вероятностью практически 100%, возможно мне просто стоит сменить место работы.

DTO объекты предназначены для инкапсуляции логики передачи данных между разными модулями приложения или внутри одного модуля. Что подразумевается под инкапсуляцией в этом случае? Например, представим себе подобный фрагмент кода:

public function methodFoo($bar, $baz, $bax) { ... }

Это достаточно реалистичный метод с тремя аргументами. Но что будет если нужно расширить логику и добавить еще один аргумент? Придется изменить интерфейс метода !!! Изменять интерфейсы в программировании - это впринципе идея плохая, потому что ломается совместимость кода. Именно в таком случае подойдет DTO объект, который инкапсулирует набор аргументов в своих свойствах.

public function methodFoo(BarDTO $barDTO) { ... }

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

public function someInterface()
{
    return new BarTuple();
}

DataProvider

Парадигма DataProvider очень важна для приложений в которых табличные данные могут быть выведены в разных форматах. Эта парадигма помогает нам спрятать логику формирования столбцов для таблиц внутрь классов провайдеров данных, после чего мы всегда работаем с данными через провайдер, что позволяет нам без лишней головной боли и вывести данные в HTML и передать их через JSON и распечатать их в XLS таблицу или DOC\PDF файл

Хороший пример реализации этой парадигмы - DataProvider из Yii2.

https://yiiframework.com.ua/ru/doc/guide/2/output-data-providers/

Поток выполнения программы

StateMachine

Данная парадигма полезна для задач, в которых нужно контроллировать процесс перехода между статусами для какого-то объекта. Эта парадигма помогает составить правила из каких статусов в какие возможно перевести состояние объекта.

Например, у нас есть объект Product, который может иметь следующий набор статусов:

NEW Новый
PROCESS Выполняется
COMPLETE Завершен

Представим следующие условия по ТЗ. Нам нельзя разрешать переводчить Товар из статуса NEW в статус COMPLETE без его обработки в статусе PROCESS. В такой ситуации как раз поможет StateMachine, можно составить следующие правила перевода статусов объекта:

MAKE_PROCESS ['from' => NEW, 'to' => PROCESS]
MAKE_COMPLETE ['from' => PROCESS, 'to' => COMPLETE]

В качестве реального примера пакета StateMachine для PHP можно привести:
https://github.com/yohang/Finite

Action

Действия нужны, чтобы инкапсулировать в себе логику которая могла бы быть в одном методе объекта. Если посмотреть с другой стороны, то можно сказать что в Действия можно выделять методы больших объектов.

Хорошим примером парадигмы "Действие" можно считать Action из Yii2.

https://www.yiiframework.com/doc/api/2.0/yii-base-action

Работа с массивами

Продолжение следует


Комментарии

admin
30.11.2019
Оставляйте свои комментарии, задавайте вопросы.

Чтобы оставить комментарий зарегистрируйтесь.

Похожие статьи