2009-02-04 3 views
2

Каков наилучший способ реализации DTO?Как эффективно использовать объекты DTO (объекты передачи данных)?

Я понимаю, что это один из способов передачи данных между объектами. Например, в приложении ASP.Net вы можете использовать DTO для отправки данных из кода в компонент уровня бизнес-логики.

Как насчет других параметров, например, просто отправить данные в качестве параметров метода? (Будет ли это проще всего, если у вас меньше данных для отправки?)

Что относительно статического класса, который просто хранит данные, на которые могут ссылаться другие объекты (своего рода глобальный класс хранения данных для сборки)? (Это слишком сильно разрушает инкапсуляцию?)

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

Спасибо, что поделились своими мыслями.

ответ

0

Спасибо за все полезные идеи ...

сводных + мое взятие на этом:

--Ели есть небольшое количество данных, чтобы переместить и не слишком много места, чтобы переместить его, регулярные параметры могут быть достаточными

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

- Глобальный объект данных, на который могут ссылаться (а не переданные) различными объектами, кажется, нахмурился ... однако, я задаюсь вопросом, не существует ли иногда места для него в пределах определенного суб- система? Это один из способов уменьшить количество передаваемых данных.Это действительно ограничивает «хорошую инкапсуляцию», однако в конкретных случаях в определенных слоях возможно, что это может добавить простоту в дополнение к классам классов. Таким образом, можно было бы потерять инкапсуляцию на уровне класса, но все равно иметь инкапсуляцию на уровне сборки.

3

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

10

Я использовал DTO, чтобы:

  • передачи данных между пользовательским интерфейсом и сервис уровня-х стандартного приложения 3 уровня.
  • Передача данных в качестве параметров метода для инкапсуляции большого количества (5+) параметров.

Подход «один DTO для управления всеми» может стать беспорядочным, лучше всего пойти с определенными DTO для каждой группы функций/функций, заботясь о названии их, чтобы их было легко сопоставить между функциями они используются.

Я никогда не видел статических DTO в том, как вы упоминаете, и будет колебаться при создании синглонов DTO, как вы описываете.

2

Я думаю, что использовать DataSet/DataTable как «один DTO, чтобы управлять ими», довольно часто. Их легко загрузить из базы данных и сохранить значения обратно, и их можно легко сериализовать.

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

1

DTO используются для передачи данных по проводам, а не между объектами. Отметьте этот пост: POCO vs DTO

+0

+1 за полезные ссылки – Graeme

3

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

1.Выставляя объекты домена для просмотра слоя, представления становятся известны о структуре объектов домена, что позволяет просматривать некоторые предположения о том, как доступны связанные объекты. Например, если объект домена «Человек» был перенастроен на представление, к которому он привязан, и на каком-либо другом представлении должен быть привязан «Адреса» Лица, для уровня приложения будет использоваться семантическая функция, например person.getAddresse(), который не сработает, поскольку в этот момент объект адресной области, возможно, не был загружен в точке. По сути, когда объекты домена становятся доступными для просмотра слоев, представления всегда могут делать предположения о том, как данные становятся доступными.

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

В основе моего опыта я видел, что создание объектов домена, доступных для Views, создает архитектурные проблемы, но есть проблемы с использованием DTO, так как использование DTO создает дополнительную работу с точки зрения создания ассемблеров (объектов DTO to Domain и reverse), Пролиферация аналогичных объектов, таких как объект домена пациента, пациент DTO и, возможно, больной пациент, подлежащий просмотру.

Очевидно, что правильные ответы на это специально в толстой клиентской системе.

я позаимствовал этот короткий и не полный, но правдивый ответ на DTO клише из:
http://www.theserverside.com/discussions/thread.tss?thread_id=32389#160505