В чем разница между объектом модели MVC, объектом домена и DTO - PullRequest
61 голосов
/ 04 октября 2010

В чем разница между объектом модели MVC, объектом домена и DTO?

Насколько я понимаю:

MVC Объект модели:

Моделирует данные, отображаемые в соответствующем представлении. Он может не отображаться непосредственно на объект домена, то есть может содержать данные из одного или нескольких объектов домена.

  1. Клиентская сторона
  2. Может содержать бизнес-логику. Например. проверки, расчетные свойства и т. д.
  3. Нет методов, связанных с постоянством

Объект домена:

Объект, который моделирует реальный объект в проблемной области, такой как Резервирование, Клиент, Заказ и т. Д. Используется для сохранения данных.

  1. Серверная сторона
  2. Нет бизнес-логики

DTO (Объект передачи данных):

Объект, используемый для передачи данных между слоями, когда слои находятся в отдельных процессах, например, из БД в клиентское приложение. Позволяет использовать одну транзакцию по сети, а не несколько вызовов при получении данных, соответствующих нескольким объектам домена. DTO содержит только данные и методы доступа, и здесь нет логики. Данные предназначены для конкретной транзакции БД, поэтому они могут или не могут напрямую отображаться на объект домена, поскольку они могут включать данные из одного или нескольких объектов домена.

  1. Используется как на стороне сервера, так и на стороне клиента при передаче между слоями
  2. Нет бизнес-логики
  3. Нет методов, связанных с постоянством

Итак, вопросы:

  1. Верно ли понимание выше? Я упускаю некоторые ключевые моменты?

  2. Есть ли какие-либо причины не использовать объекты домена в качестве модели MVC, если предположить, что объектам модели не требуется дополнительная бизнес-логика?

  3. Есть ли причины не использовать DTO в качестве модели MVC, предполагая, что объектам Model не требуется дополнительная бизнес-логика?

Ответы [ 6 ]

16 голосов
/ 04 октября 2010

Объекты домена и модели по сути одинаковы и могут содержать бизнес-логику.В зависимости от реализации объекты домена и DTO могут быть эквивалентны, если вы удалите бизнес-логику из модели в класс обслуживания.

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

8 голосов
/ 04 октября 2010

Домен и DTO также могут быть вашими «модельными» объектами - вы можете просматривать детали объекта «Клиент».

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

Модель программирования POJO позволяет использовать тот же объект, что и ваш домен, DTO и объекты модели - по сути, вы не будете реализовывать какие-либо посторонние интерфейсы, которые будут применяться только к одному слою, но не применяются к другим.

3 голосов
/ 14 октября 2013
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).

Часто приложение (легкое) может иметь одну модель - случай, в котором ваша модель является именно вашим доменом.Другой моделью может быть совершенно другой тип объекта, который обрабатывает другой.Оба они, в данном случае, являются частью вашего домена и называются «моделями доменов - объектами».

Надеюсь, этот ответ является исчерпывающим и прояснит все для вас!

1 голос
/ 23 мая 2019

Мое понимание (в большом коротком) следующее:

(MVC) Объект модели:

  • представляют некоторые вещи в некотором контексте использованиянапример.PersonEditModel, PersonViewModel или просто PersonModel
  • не имеет бизнес-логики
  • может быть предметом некоторой логики проверки и т.д.
  • используется для предоставления данных из одного приложенияслой к другому, например.MVC Controller <-> MVC View

Объект домена:

  • представляет некоторый бизнес-объект (объект реального мира в проблемной области)
  • имеет бизнес-логику
  • не допускает недопустимое состояние объекта, имеет методы для правильного изменения состояния объекта
  • , используемые для инкапсуляции связанной с ним бизнес-логикииспользуется для сохранения данных (или даже не должен)

DTO (объект передачи данных):

  • аналогично объекту модели, но должен иметь плоскую структуру
  • только свойства / поля простого типа (строки, числа, дата-время, логические значения)
  • используется для передачи данных через границы приложения, например.между веб-сервером и веб-браузером
1 голос
/ 27 января 2018

Любое определение для большинства объектов различается в зависимости от места использования объектов:

Model: это общее определение для использования объекта в клиенте или сервере .

  1. Model View: это объект , использующий в client большую часть времени.
  2. Domain Object: объект , использующий в server и transfering data to the database.
  3. Data Transfer Object(DTO): это объект, который передает данные от одного объекта к другому объекту , особенно при получении данных в API Call (например: в API метод GET вызов При получении данных вы не должны передавать модели баз данных клиенту, для этого вы используете dto).

Примечание: the definitions are true most of the time, но в некоторых ситуациях это не практично.

1 голос
/ 16 августа 2016

1) Нет, это определение ViewModel.Объект модели MVC и объект домена оба одинаковы.
2) Доменные модели (объекты) присутствуют всегда, бизнес-логика необязательна
3) Если в доменном объекте нет бизнес-логики, то автоматически она становится DTO.

...