Что такое data transfer

data transfer

передача информации
Передача оцифрованной информации в соответствии с протоколом.
[ГОСТ Р 41.13-2007]

передача информации
Процесс переноса информации (данных) от ее источника к потребителю. В общем виде его можно представить следующей схемой (рис. П.3). Эта схема показывает, что для П.и. ее необходимо закодировать (см. Кодирование), т.е. превратить в сигналы, удобные для прохождения по каналу связи, а затем декодировать, т.е. восстановить переданное сообщение. Важными проблемами являются экономное кодирование, позволяющее ускорить прохождение сигналов, и обеспечение достоверности переданной информации (сокращение вероятности ошибок).. Рис. П.3 Процесс передачи данных по каналу связи. 1 — источник сообщений; II — кодирующее устройство; III — канал связи; IV — декодирующее устройство; V —получатель информации
[http://slovar-lopatnikov.ru/]

Тематики

Смотреть что такое «data transfer» в других словарях:

Data transfer object — (DTO),[1][2] is a design pattern used to transfer data between software application subsystems. DTOs are often used in conjunction with data access objects to retrieve data from a database.[1][2] The difference between data transfer objects and… … Wikipedia

Data Transfer Object — Data Transfer Objects (DTO), formerly known as Value Objects or VO, are a design pattern used to transfer data between software application subsystems. DTOs are often used in conjunction with Data Access Objects to retrieve data from a… … Wikipedia

data-transfer rate — duomenų perdavimo sparta statusas T sritis automatika atitikmenys: angl. data signalling rate; data transfer rate; data transmission rate; send rate; transmission speed vok. Datenübertragungsgeschwindigkeit, f rus. скорость передачи данных, f… … Automatikos terminų žodynas

data transfer facility — (DTF) Provides bi directional data transfer between an IBM MVS system in a System Network Architecture (SNA) environment and VAX/VMS systems in a DECnet network … IT glossary of terms, acronyms and abbreviations

data-transfer rate — 1. The speed at which a disk drive can transfer information from the drive to the processor, usually measured in megabits or megabytes per second. 2. The rate of information exchange between two systems. For example, an Ethernet LAN may… … Dictionary of networking

data transfer rate — Average number of bits, characters, or blocks transferred from a data server to a data link … IT glossary of terms, acronyms and abbreviations

Data Transfer Object — Das Transferobjekt oder Datentransferobjekt (Abk.: DTO) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung. Es bündelt mehrere Daten in einem Objekt, sodass sie durch einen einzigen Programmaufruf übertragen werden können.… … Deutsch Wikipedia

data transfer rate — noun the transmission speed of a communications channel; measured in bits or bytes per second … Wiktionary

UDP-based Data Transfer Protocol — UDP based Data Transfer Protocol, also known as UDT, is a high performance data transfer protocol designed for transferring large volumetric datasets over high speed wide area networks, where TCP does not work very well.UDT is built on top of… … Wikipedia

Effective data transfer rate — In telecommunication, effective data transfer rate is the average number of units of data, such as bits, characters, blocks, or frames, transferred per unit time from a source and accepted as valid by a sink. Note: The effective data transfer… … Wikipedia

Источник

Переосмысление DTO в Java

Привет, Хабр! Представляю вашему вниманию любительский перевод статьи “Rethinking the Java DTO” Стивена Уотермана, где автор рассматривает интересный и нестандартный подход к использованию DTO в Java.

Я провел 12 недель в рамках программы подготовки выпускников Scott Logic, работая с другими выпускниками над внутренним проектом. И был момент, который застопорил меня больше других: структура и стиль написания наших DTO. Это вызывало массу споров и обсуждений на протяжении всего проекта, но в итоге я понял, что мне нравится использовать DTO.

Данный подход не является единственно верным решением, но он довольно интересный и отлично подходит для разработки с использованием современных IDE. Надеюсь, что изначальный шок пройдет и вам он тоже понравится.

Что такое DTO (Data Transfer Object)?

Зачастую, в клиент-серверных приложениях, данные на клиенте (слой представления) и на сервере (слой предметной области) структурируются по-разному. На стороне сервера это дает нам возможность комфортно хранить данные в базе данных или оптимизировать использование данных в угоду производительности, в то же время заниматься “user-friendly” отображением данных на клиенте, и, для серверной части, нужно найти способ как переводить данные из одного формата в другой. Конечно, существуют и другие архитектуры приложений, но мы остановимся на текущей в качестве упрощения. DTO-подобные объекты могут использоваться между любыми двумя слоями представления данных.

Что такое data transfer. Смотреть фото Что такое data transfer. Смотреть картинку Что такое data transfer. Картинка про Что такое data transfer. Фото Что такое data transfer

DTO — это так называемый value-object на стороне сервера, который хранит данные, используемые в слое представления. Мы разделим DTO на те, что мы используем при запросе (Request) и на те, что мы возвращаем в качестве ответа сервера (Response). В нашем случае, они автоматически сериализуются и десериализуются фреймворком Spring.

Представим, что у нас есть endpoint и DTO для запроса и ответа:

Что делают хорошие DTO?

Во-первых, очень важно понимать, что вы не обязаны использовать DTO. Это прежде всего паттерн и ваш код может работать отлично и без него.

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

Тем не менее, не все DTO являются хорошими. Хорошие DTO помогают создавать API согласно лучшим практикам и в соответствии с принципам чистого кода.

Они должны позволять разработчикам писать API, которое внутренне согласовано. Описание параметра на одной из конечных точек (endpoint) должно применяться и к параметрам с тем же именем на всех связанных точках. В качестве примера, возьмём вышепредставленный фрагмент кода. Если поле price при запросе определено как “цена с НДС”, то и в ответе определение поля price не должно измениться. Согласованное API предотвращает ошибки, которые могли возникнуть из-за различий между конечными точками, и в то же время облегчает введение новых разработчиков в проект.

DTO должны быть надёжными и сводить к минимуму необходимость в написании шаблонного кода. Если при написании DTO легко допустить ошибку, то вам нужно прилагать дополнительные усилия, чтобы ваше API оставалось согласованным. DTO должны “легко читаться”, ведь даже если у нас есть хорошее описание данных из слоя представления — оно будет бесполезно, если его тяжело найти.

Давайте посмотрим на примеры DTO, а потом определим, соответствуют ли они нашим требованиям.

Покажи нам код!

Этот код на первый взгляд может показаться довольно странным, но не переживайте. В оставшейся части поста я объясню почему я остановился на данной реализации и какие преимущества она дает. Надеюсь, что вам станет всё понятно и вы оцените данный подход.

Он частично основывается на реальном коде из нашего проекта для выпускников, переведенный в контекст интернет-магазина. В нём каждый продукт имеет название, розничную и оптовую цену. Для хранения цены мы используем тип данных Double, но в реальных проектах вы должны использовать BigDecimal.

Мы создаем по одному файлу для каждого контроллера, который содержит базовый enum без значений, в нашем случае это ProductDTO. Внутри него, мы разделяем DTO на те, что относятся к запросам (Request) и на те, что относятся к ответу (Response). На каждый endpoint мы создаем по Request DTO и столько Response DTO сколько нам необходимо. В нашем случае у нас два Response DTO, где Public хранит данные для любого пользователя и Private который дополнительно содержит оптовую цену продукта.

Для каждого параметра мы создаем отдельный интерфейс с таким же именем. Каждый интерфейс содержит один-единственный метод — геттер для параметра, который он определяет. Любая валидация осуществляется через метод интерфейса. В нашем примере, аннотация @NotBlank проверяет что название продукта в DTO не содержит пустую строку.

Для каждого поля который входит в DTO мы реализовываем соответствующий интерфейс. В нашем случае аннотация @Value из библиотеки Lombok делает это за нас, автоматически генерируя геттеры.

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

“Это ужасно!”

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

Мы используем слишком много интерфейсов — по одному на каждый параметр! Мы делаем это потому что считаем данные интерфейсы единственным источником описательной информации относительно параметра который он определяет. Далее мы поговорим об этом чуть больше, но поверьте мне, это принесет свои плоды.

Мы не реализовали методы интерфейсов. Да, выглядит немного странно и я хотел бы найти решение получше. Сейчас мы используем автогенерацию геттеров при помощи Lombok для закрытия контракта и это небольшой хак. Выглядело бы лучше, если бы мы могли объявлять поля сразу в интерфейсе, что позволяло бы создавать DTO в одной строчке кода. Однако, в java нет возможности интерфейсам иметь не статические поля. Если вы будете использовать этот подход в других языках, то возможно ваш код будет более лаконичным.

Это (почти) идеально

Давайте вернемся к нашим требованиям к созданию хорошего DTO. Соотвествует ли им наш подход?

Согласованный синтаксис

Мы определенно улучшили согласованность синтаксиса и это главное почему мы могли бы начать использовать данный паттерн. Каждый API параметр теперь имеет свой синтаксис, определенный через интерфейс. Если DTO содержит опечатку в имени параметра или некорректный тип — код просто не скомпилируется и IDE выдаст вам ошибку. Для примера:

К тому же, когда мы используем валидацию на уровне интерфейса, мы исключаем ситуацию, когда один и тот же параметр на одном endpoint проходит валидацию и не проходит её на другом.

Согласованная семантика

Такой стиль написания DTO улучшает понимание кода через наследование документации. Каждый параметр имеет свою семантику которая определена в геттер методах соответствующего ему интерфейса. Пример:

Как только в DTO мы реализовали данный интерфейс, наша документация автоматически стала доступна через геттер.

Что такое data transfer. Смотреть фото Что такое data transfer. Смотреть картинку Что такое data transfer. Картинка про Что такое data transfer. Фото Что такое data transfer

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

Читабельность & Поддерживаемость

Будем честны: в нашем подходе достаточно много шаблонного кода. У нас есть 4 интерфейса, без которых не обойтись, и каждый DTO имеет длинную строку с перечислением интерфейсов. Мы можем вынести интерфейсы в отдельный пакет, что поможет избежать лишних “шумов” в коде c описанием DTO. Но даже после этого, бойлерплейт остается главным недостатком данного подхода, что может оказаться веской причиной для того чтобы использовать другой стиль. Для меня, эти затраты все еще стоят того.

К тому же, мы видим всю структуру наших DTO классов. Посмотрите на код и вы увидите все что вам нужно знать из сигнатуры класса. Каждое поле указано в списке реализованных интерфейсов. Достаточно нажать ctrl + q в IntelliJ и вы увидите список полей.

Что такое data transfer. Смотреть фото Что такое data transfer. Смотреть картинку Что такое data transfer. Картинка про Что такое data transfer. Фото Что такое data transfer

В нашем подходе мы пишем валидацию единоразово, т.к. она реализуется через методы интерфейса. Создали новое DTO — получили валидацию в подарок, после реализации интерфейса.

И в заключении, благодаря нашим интерфейсам, мы способны писать переиспользуемые утилитные методы. В качестве примера, рассмотрим ситуацию, когда нам нужно посчитать наценку на товар:

В java, мы можем реализовать это используя обобщение:

Вывод

Я не жду, что вы сразу же пойдете переписывать все ваши DTO. Но есть несколько деталей которые вы можете почерпнуть для себя:

Источник

DataTransfer

Объект DataTransfer используется для хранения данных, перетаскиваемых мышью во время операции drag and drop. Он может хранить от одного до нескольких элементов данных, вне зависимости от их типа. Для получения доп. информации об операции drag and drop, см. Drag and Drop

Объект может быть получен из свойства dataTransfer всех событий перетаскивания. Он не может быть отдельно создан.

Список свойств

Список методов

void addElement(in Element element)
void clearData([in String type])
String getData(in String type)
void setData(in String type, in String data)
void setDragImage(in nsIDOMElement image, in long x, in long y)
void mozClearDataAt([in String type, in unsigned long index])
nsIVariant mozGetDataAt(in String type, in unsigned long index)
void mozSetDataAt(in String type, in nsIVariant data, in unsigned long index)
StringList mozTypesAt([in unsigned long index])

Свойства

dropEffect

Реальное действие, которое будет выполнено, и единственное возможное значение свойства effectAllowed.

Для событий dragenter и dragover, dropEffect будет инициализировано значением, зависящим от того, какое действие запрашивает пользователь. То, как это определяется, зависит от платформы, но, как правило, пользователи могут зажать клавиши-модификаторы для выбора желаемого действия. В обработчике событий для dragenter и dragover, dropEffect следует модифицировать, если запрашиваемое пользователем действие не то, которое требовалось.

Для событий dragstart, drag, и dragleave, dropEffect будет инициализировано значением «none». Свойства dropEffect можно присвоить любое значение, но оно не будет ни для чего использоваться.

Для событий drop и dragend, dropEffect будет инициализировано значением, которое было назначено свойству dropEffect после последнего события dragenter или dragover.

Присвоение каких-либо других значений не возымеет эффекта и оставит старое значение.

effectAllowed

Определяет эффекты, которые разрешены для этого перетаскивания. Вы можете указать их в событии dragstart чтобы желаемый эффект сработал на перетаскиваемом элементе (что перетаскиваем), или в событии dragenter и dragenter чтобы желаемый эффект сработал для цели перетаскивания (куда перетаскиваем). В других событиях значение не используется.

Assigning any other value has no effect and retains the old value.

files

Содержит список локальных файлов доступных на dataTransfer. Если операция перемещения не включала в себя перемещение файлов, то данное свойство будет пустым списком. Неверное обращение по индексу к объекту FileList определённым данным свойством вернёт null.

Пример

Данный пример демонстрирует перетаскивание файлов в окно браузера:

types

Содержит список типов форматов данных в порядке добавления данных. Если ничего не было добавлено, то будет вернут пустой список.

mozCursor

The drag cursor’s state. This is primarily used to control the cursor during tab drags.

Possible values

mozItemCount

The number of items being dragged.

mozSourceNode

The Node over which the mouse cursor was located when the button was pressed to initiate the drag operation. This value is null for external drags or if the caller can’t access the node.

mozUserCancelled

This property applies only to the dragend event, and is true if the user canceled the drag operation by pressing escape. It will be false in all other cases, including if the drag failed for any other reason, for instance due to a drop over an invalid location. This property is not currently implemented on Linux.

Методы

addElement()

Данный метод устанавливает источник перетаскивания. Обычно вы его не изменяете, но он влияет на то, на каком узле запускаются события drag и dragend. По умолчанию целью является узел который перетаскивали.

Параметры

clearData()

Удаление данных, связанные с указанным типом. Аргумент type является необязательным. Если type пуст или не указан, тогда данные, связанные со всеми типами удаляются. Если данные для указанного типа не существуют или передача данных не содержит данных, тогда этот метод не будет делать ничего.

Параметры

getData()

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

Ошибка безопасности возникает при попытке получить данные во время перетаскивания из другого домена, иначе вызывающий объект не будет иметь доступа. Эти данные будут доступны только после того, как элемент будет отпущен в случае события drop.

Параметры

Тип данных который будет возвращён.

setData()

Установка данных для указываемого типа. Если данные для type не существуют, тогда они добавляются в конце, так что последним элементом в списке типов будет новый формат. Если данные для type уже существуют, существующие данные заменяются в том же положении. То есть порядок списка типов не изменяется при замене данных одного и того же типа.

Параметры

setDragImage()

Устанавливает изображение, которое будет использоваться для перетаскивания если нужно. В большинстве случаев это не будет установлено, так как изображение по умолчанию создаётся из перетаскиваемого узла.

Если узел является HTML-элементом img, HTML-элементом canvas или XUL-элементом изображения, тогда используются данные изображения. В противном случае изображение должно быть видимым узлом, и из этого будет создано перетаскиваемое изображение. Если изображение равно null, любое пользовательское изображение перетаскиваемое очищается и вместо него используется значение по умолчанию.

Координаты указывают смещение в изображении, где должен находиться курсор мыши. Например, для центрирования изображения используйте значения, которые составляют половину ширины и высоты изображения.

Параметры

mozClearDataAt()

Removes the data associated with the given format for an item at the specified index. The index is in the range from zero to the number of items minus one.

If the last format for the item is removed, the entire item is removed, reducing mozItemCount by one.

If the format list is empty, then the data associated with all formats is removed. If the format is not found, then this method has no effect.

Parameters

mozGetDataAt()

Retrieves the data associated with the given format for an item at the specified index, or null if it does not exist. The index should be in the range from zero to the number of items minus one.

Parameters

mozSetDataAt()

A data transfer may store multiple items, each at a given zero-based index. mozSetDataAt() may only be called with an index argument less than mozItemCount in which case an existing item is modified, or equal to mozItemCount in which case a new item is added, and the mozItemCount is incremented by one.

Data should be added in order of preference, with the most specific format added first and the least specific format added last. If data of the given format already exists, it is replaced in the same position as the old data.

Parameters

mozTypesAt()

Holds a list of the format types of the data that is stored for an item at the specified index. If the index is not in the range from 0 to the number of items minus one, an empty string list is returned.

Источник

data transfer

Смотреть что такое «data transfer» в других словарях:

Data transfer object — (DTO),[1][2] is a design pattern used to transfer data between software application subsystems. DTOs are often used in conjunction with data access objects to retrieve data from a database.[1][2] The difference between data transfer objects and… … Wikipedia

Data Transfer Object — Data Transfer Objects (DTO), formerly known as Value Objects or VO, are a design pattern used to transfer data between software application subsystems. DTOs are often used in conjunction with Data Access Objects to retrieve data from a… … Wikipedia

data-transfer rate — duomenų perdavimo sparta statusas T sritis automatika atitikmenys: angl. data signalling rate; data transfer rate; data transmission rate; send rate; transmission speed vok. Datenübertragungsgeschwindigkeit, f rus. скорость передачи данных, f… … Automatikos terminų žodynas

data transfer facility — (DTF) Provides bi directional data transfer between an IBM MVS system in a System Network Architecture (SNA) environment and VAX/VMS systems in a DECnet network … IT glossary of terms, acronyms and abbreviations

data-transfer rate — 1. The speed at which a disk drive can transfer information from the drive to the processor, usually measured in megabits or megabytes per second. 2. The rate of information exchange between two systems. For example, an Ethernet LAN may… … Dictionary of networking

data transfer rate — Average number of bits, characters, or blocks transferred from a data server to a data link … IT glossary of terms, acronyms and abbreviations

Data Transfer Object — Das Transferobjekt oder Datentransferobjekt (Abk.: DTO) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung. Es bündelt mehrere Daten in einem Objekt, sodass sie durch einen einzigen Programmaufruf übertragen werden können.… … Deutsch Wikipedia

data transfer rate — noun the transmission speed of a communications channel; measured in bits or bytes per second … Wiktionary

UDP-based Data Transfer Protocol — UDP based Data Transfer Protocol, also known as UDT, is a high performance data transfer protocol designed for transferring large volumetric datasets over high speed wide area networks, where TCP does not work very well.UDT is built on top of… … Wikipedia

Effective data transfer rate — In telecommunication, effective data transfer rate is the average number of units of data, such as bits, characters, blocks, or frames, transferred per unit time from a source and accepted as valid by a sink. Note: The effective data transfer… … Wikipedia

Источник

data transfer

Смотреть что такое «data transfer» в других словарях:

Data transfer object — (DTO),[1][2] is a design pattern used to transfer data between software application subsystems. DTOs are often used in conjunction with data access objects to retrieve data from a database.[1][2] The difference between data transfer objects and… … Wikipedia

Data Transfer Object — Data Transfer Objects (DTO), formerly known as Value Objects or VO, are a design pattern used to transfer data between software application subsystems. DTOs are often used in conjunction with Data Access Objects to retrieve data from a… … Wikipedia

data-transfer rate — duomenų perdavimo sparta statusas T sritis automatika atitikmenys: angl. data signalling rate; data transfer rate; data transmission rate; send rate; transmission speed vok. Datenübertragungsgeschwindigkeit, f rus. скорость передачи данных, f… … Automatikos terminų žodynas

data transfer facility — (DTF) Provides bi directional data transfer between an IBM MVS system in a System Network Architecture (SNA) environment and VAX/VMS systems in a DECnet network … IT glossary of terms, acronyms and abbreviations

data-transfer rate — 1. The speed at which a disk drive can transfer information from the drive to the processor, usually measured in megabits or megabytes per second. 2. The rate of information exchange between two systems. For example, an Ethernet LAN may… … Dictionary of networking

data transfer rate — Average number of bits, characters, or blocks transferred from a data server to a data link … IT glossary of terms, acronyms and abbreviations

Data Transfer Object — Das Transferobjekt oder Datentransferobjekt (Abk.: DTO) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung. Es bündelt mehrere Daten in einem Objekt, sodass sie durch einen einzigen Programmaufruf übertragen werden können.… … Deutsch Wikipedia

data transfer rate — noun the transmission speed of a communications channel; measured in bits or bytes per second … Wiktionary

UDP-based Data Transfer Protocol — UDP based Data Transfer Protocol, also known as UDT, is a high performance data transfer protocol designed for transferring large volumetric datasets over high speed wide area networks, where TCP does not work very well.UDT is built on top of… … Wikipedia

Effective data transfer rate — In telecommunication, effective data transfer rate is the average number of units of data, such as bits, characters, blocks, or frames, transferred per unit time from a source and accepted as valid by a sink. Note: The effective data transfer… … Wikipedia

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *