В чем разница между объектом MVC Model, объектом домена и DTO
В чем разница между объектом модели MVC, объектом домена и DTO?
Мое понимание таково:
Объект модели MVC:
Моделирует данные для отображения в соответствующем представлении. Он может не отображаться непосредственно на объект домена, то есть может включать данные из одного или нескольких объектов домена.
- Сторона клиента
- Может содержать бизнес-логику. Например. проверки, расчетные свойства и т.д.
- Нет методов, связанных с постоянством
Доменный объект:
Объект, который моделирует реальный объект в проблемной области, такой как Резервирование, Клиент, Заказ и т.д. Используется для сохранения данных.
- Серверная сторона
- Нет бизнес-логики
DTO (Объект передачи данных):
Объект, используемый для передачи данных между слоями, когда слои находятся в отдельных процессах, например, из БД в клиентское приложение. Позволяет использовать одну транзакцию по сети, а не несколько вызовов при получении данных, соответствующих нескольким объектам домена. DTO содержит только данные и методы доступа, и здесь нет логики. Данные предназначены для конкретной транзакции БД, поэтому они могут или не могут напрямую отображаться в объекте домена, поскольку они могут включать в себя данные из одного или нескольких объектов домена.
- Используется как на стороне сервера, так и на стороне клиента, так как он передается между слоями
- Нет бизнес-логики
- Нет методов, связанных с постоянством
Итак, вопросы:
-
Верно ли понимание выше? Я упускаю некоторые ключевые моменты?
-
Есть ли какие-либо причины не использовать объекты Domain в качестве модели MVC, если предположить, что объекты Model не требуют дополнительной бизнес-логики?
-
Есть ли причины не использовать DTO в качестве модели MVC, если предположить, что объекты Model не требуют дополнительной бизнес-логики?
Ответы
Ответ 1
Объекты домена и модели по существу одинаковы и могут содержать бизнес-логику. В зависимости от реализации объекты домена и DTO могут быть эквивалентны, если вы удаляете бизнес-логику из модели в класс службы.
Часто ключевым вариантом DTO является модель просмотра, которая используется исключительно для передачи данных между моделью домена и представлением, хотя часто модель просмотра может содержать логику, хотя это должно быть чисто логикой пользовательского интерфейса.
Ответ 2
Домен и DTO также могут быть вашими "образными" объектами - вы можете иметь представление, чтобы отображать детали объекта домена "Клиент".
Объект домена может иметь бизнес-логику для обеспечения свойств объекта домена. Валидация - один такой случай. Объект домена сам по себе не содержит методов, связанных с сохранением, но он может иметь метаданные (например, аннотации) для поддержки сохранения
модель программирования POJO позволяет использовать тот же объект, что и объекты вашего домена, DTO и модели, - по сути, вы не будете реализовывать какие-либо посторонние интерфейсы, которые будут применяться только к одному слою, но не применяются к другим.
Ответ 3
A DTO = is an object that carries data between processes.
Но самая интересная часть заключается в том, что у нее нет никакого поведения, кроме хранения и извлечения собственных данных!!!
Придерживаясь методологии MVC...
Domain = subject of your entire application.
Model = contains the (programming languages objects : EX: C# objects) to make up the universe of your application.
Они могут явно иметь поведение и свойства (см. разницу с DTO).
Часто приложение (легкое) может иметь одну модель - случай, когда ваша модель является именно вашим доменом.
Еще одной моделью может быть целый тип объекта, который обрабатывает другой. Оба они, в данном случае, являются частью вашего домена и называются "предметные модели - объекты".
Надеюсь, этот ответ будет исчерпывающим и сделает все для вас понятным!
Ответ 4
Любое определение для большинства объектов различается в зависимости от места использования объектов:
Model
: это общее определение для использования объекта в клиенте или на сервере.
-
Model View
: объект, который используется в client
большую часть времени. -
Domain Object
: это объект, который используется на server
и transfering data to the database
. -
Data Transfer Object(DTO)
: это объект, который передает данные от одного объекта к другому объекту, особенно при получении данных в API Call
(например: в вызове метода GET API для получения данных, вы не должны передавать модели базы данных клиенту, для Для этого вы используете dto
).
Обратите внимание: the definitions are true most of the time
но в некоторых ситуациях они не практичны.
Ответ 5
1) Нет, это определение ViewModel. Объект объекта MVC и объект домена оба одинаковы.
2) Доменные модели (объекты) всегда присутствуют, бизнес-логика является необязательной.
3) Если в объекте Domain нет бизнес-логики, автоматически становится DTO.
Ответ 6
Мое понимание (в большом коротком) следующее:
(MVC) Модельный объект:
- представлять некоторые вещи в некотором контексте использования, например.
PersonEditModel
, PersonViewModel
или просто PersonModel
- не имеет бизнес-логики
- может быть предметом некоторой логики оценки и т.д.
- используется для предоставления данных с одного прикладного уровня на другой, например. MVC Controller <-> MVC View
Доменный объект:
- представляет некоторый бизнес-объект (объект реального мира в проблемной области)
- имеет бизнес-логику
- не разрешать недопустимое состояние объекта, имеет методы для правильного изменения состояния объекта
- используется для инкапсуляции бизнес-логики, связанной с ней
- не должны использоваться для сохранения данных (или даже не должны)
DTO (Объект передачи данных):
- похож на объект модели, но должен иметь плоскую структуру
- только свойства/поля простого типа (строки, числа, дата-время, логические значения)
- используется для передачи данных через границы приложения, например. между веб-сервером и веб-браузером