Использование Laravel-контрактов в слоях Application / Domain - PullRequest
0 голосов
/ 22 декабря 2018

Я создаю приложение на вершине Laravel.В моем Domain слое у меня есть сервисы.Один из них должен отправить электронное письмо.Laravel имеет пакет Illuminate\Mail для этих целей.

Но Mailer контракт зависит от класса \Illuminate\Mail\PendingMail.https://github.com/laravel/framework/blob/5.7/src/Illuminate/Contracts/Mail/Mailer.php

Означает ли это, что мне нужно написать собственный интерфейс (порт) для моего Domain слоя, чтобы полностью отделить мое приложение от фреймворка?

1 Ответ

0 голосов
/ 22 декабря 2018

Если честно, я не уверен, что вы спрашиваете.Но я постараюсь ответить всегда.

Если вы используете (любые) функциональные возможности фреймворка непосредственно в своем коде, вы явно связываете свое приложение с фреймворком.Вот и весь смысл рамок.Он предлагает вам множество функций, которые обычно используются в различных типах приложений.Это можно рассматривать как основу для приложения.Эти функциональные возможности часто предоставляются через интерфейсы, поэтому при необходимости их можно заменить.Замена реализации не сделает ваше приложение менее связанным с фреймворком.Это просто позволяет вам использовать другой вид реализации;интерфейс по-прежнему будет фреймворком.

Итак, единственный способ предотвратить (тяжелую) связь с фреймворком - это написать свои собственные интерфейсы, которые абстрагируют все функциональные возможности фреймворка.После этого у вас могут быть прокси-классы, которые реализуют эти новые интерфейсы и не делают ничего, кроме прокси-запросов к соответствующим функциям платформы, что позволяет вам в будущем писать другие прокси-классы для другой платформы.

Если вы спросите меняэто звучит как плохая идея, хотя.Потому что, в конце концов, вы создаете свою собственную платформу на основе ваших собственных интерфейсов.Таким образом, вы используете дополнительный пользовательский код, который не добавляет никакой дополнительной функциональности, но сопряжен с дополнительным риском ошибок и ошибок.

...