Прочитал много статей, где люди говорят, что я должен вернуть модель домена ... Но тогда это разрушит всю идею моего репозитория.
Я использую laravel Eloquent Models (это, если я прав, модели домена). У меня есть репозиторий, поэтому, если я решу переключиться на Doctrine, я могу просто поменять его местами у поставщика услуг. Но если я верну экземпляр модели предметной области (в данном случае Eloquent Model), это не имеет смысла. Мне нужно вернуть тот же результат из репозитория, и DTO кажется именно тем, что мне нужно ...
Может кто-нибудь объяснить мне, почему я не прав?
1 ответ
Что есть что
Прежде всего, я хотел бы дать свое толкование используемых вами терминов.
DTO (объект передачи данных)
- Обычно это класс PHP с общедоступными свойствами.
- Только несет ответственность за передачу данных
- Не проверяет данные
- Не знает о каких-либо конкретных вещах реализации (например, к какому ORM он привязан)
- Обычно используется для передачи данных между частями приложения, при этом ни одна из частей не знает о реализации другой.
Доменная модель
- Обычно это класс PHP с частными свойствами.
- Должны содержать только действительные данные
- Подтверждает, что любые изменения приводят к действительному состоянию
- Не знает о каких-либо конкретных вещах реализации (например, к какому ORM он привязан)
Вместилище
- Отвечает только за хранение и получение данных
- Знает о его реализации (например, к какому ORM он привязан)
- Не несет ответственности за возврат достоверных данных
Что это значит для вашего случая
Ответ действительно зависит от того, насколько чистым вы хотите мыслить с точки зрения разделения ответственности.
Если вы разговариваете с пуристами, они скажут, что модели Eloquent не являются DTO и не являются моделями предметной области. Репозиторий вернет красноречивую модель, которая будет сопоставлена с моделью предметной области. Затем эту модель предметной области можно изменить или преобразовать в DTO, который можно использовать для чтения данных. В этом случае обязанности разделены за счет большего количества кода.
Если вы разговариваете с прагматиками, они скажут, что модели Eloquent - это DTO и модели предметной области (а иногда даже репозитории). Поскольку красноречивые модели отвечают за хранение данных, извлечение данных, изменение данных и передачу этих данных в другие части приложения.
В конце концов, все дело в предпочтениях. Вы можете идти чисто, вы можете идти прагматично, вы даже можете выбрать что-то среднее. Это полностью зависит от того, насколько вы продвинутый программист, насколько велик проект, насколько он должен быть обслуживаемым, как быстро нужно вносить изменения и т. Д.
Tdlr
Репозиторий может возвращать DTO или модель предметной области в зависимости от того, насколько чисто вы думаете о разделении ответственности.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.