424 Часть II. Типовые решения
Назначение
Объект переноса данных применяется во всех случаях перемещения данных между
процессами, когда за один вызов необходимо передать большое количество данных.
Существует несколько альтернатив использованию объекта переноса данных, хотя мне
они не слишком нравятся. Один из возможных вариантов — вообще не создавать вспо-
могательного объекта, а воспользоваться set-методом со множеством аргументов или же
get-методом с механизмом передачи параметров по ссылке. Данный подход имеет суще-
ственный недостаток: во многих языках, в частности Java, метод может возвращать толь-
ко один объект. Таким образом, хотя подобная схема вполне подходит для обновлений,
она не может быть использована для извлечения данных без хитроумных манипуляций с
обратными вызовами.
Еще одна альтернатива предполагает непосредственную передачу данных в виде стро-
ки, без участия специального объекта в качестве интерфейса. Недостатком этого подхода
является слишком тесная зависимость механизма передачи от строкового представления
данных. Вообще говоря, конкретное представление рекомендуется скрывать за явным
интерфейсом. В этом случае, если понадобится изменить строковое представление дан-
ных или заменить его двоичной структурой, вам не придется изменять все остальное.
Объект переноса данных особенно удобен тогда, когда взаимодействие между клиент-
ским и серверным компонентами осуществляется с применением XML. Модель XML
DOM довольно неудобна в обращении, поэтому ее гораздо проще инкапсулировать в
объекте переноса данных, особенно с учетом простоты автоматической генерации по-
следнего.
Довольно часто объект переноса данных применяется в качестве общего источника
данных для компонентов различных слоев приложения. Каждый компонент вносит в
объект переноса данных некоторые изменения и передает его следующему слою. Хоро-
шим примером использования подобной схемы является применение множества записей
(Record Set, 523) в СОМ и .NET. Здесь каждый слой приложения "умеет" обращаться с
данными, представленными в виде множества записей, независимо от того, пришло ли
это множество прямо из базы данных SQL или же было изменено другими слоями. Плат-
форма .NET еще более расширяет данную схему, предоставляя встроенный механизм се-
риализации множеств записей в формат XML.
Хотя эта книга посвящена синхронным системам, объект переноса данных может
применяться и для асинхронного перемещения данных. Подобная необходимость возни-
кает тогда, когда интерфейс доступа к данным желательно использовать и синхронно и
асинхронно. При синхронном извлечении данных объект переноса данных будет возвра-
щаться обычным способом, а при асинхронном — с помощью загрузки по требованию
(Lazy Load, 220). Последнюю необходимо использовать везде, где могут фигурировать ре-
зультаты выполнения асинхронных вызовов. Пользователь объекта переноса данных бу-
дет блокировать доступ остальных пользователей только тогда, когда попытается извлечь
результаты выполнения вызова.
Дополнительные источники информации
В [3] типовое решение объект переноса данных рассматривается под именем объект-
значение (Value Object). Как уже отмечалось, последнее не имеет ничего общего с типо-
вым решением объект-значение (Value Object, 500). Это не более чем досадное совпадение