-
Notifications
You must be signed in to change notification settings - Fork 0
/
data-transfer-objects.html
18 lines (17 loc) · 9.28 KB
/
data-transfer-objects.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html><html lang="de-ch"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Data Transfer Objects - Finecloud</title><meta name="description" content="Data Transfer Objects DTOs - Data Transfer Objects DTOs are simple Java POJOs DTOs are data structures, generally should NOT have behavior DTOs are objects used to transfer data between producers and consumers Controller models are typically DTOs Why Not Entities? Database Entities are also…"><meta name="generator" content="Publii Open-Source CMS for Static Site"><link rel="stylesheet" href="https://www.finecloud.ch/media/plugins/syntaxHighlighter/prism-black.css"><link rel="canonical" href="https://www.finecloud.ch/data-transfer-objects.html"><link rel="alternate" type="application/atom+xml" href="https://www.finecloud.ch/feed.xml"><link rel="alternate" type="application/json" href="https://www.finecloud.ch/feed.json"><meta property="og:title" content="Data Transfer Objects"><meta property="og:site_name" content="Finecloud"><meta property="og:description" content="Data Transfer Objects DTOs - Data Transfer Objects DTOs are simple Java POJOs DTOs are data structures, generally should NOT have behavior DTOs are objects used to transfer data between producers and consumers Controller models are typically DTOs Why Not Entities? Database Entities are also…"><meta property="og:url" content="https://www.finecloud.ch/data-transfer-objects.html"><meta property="og:type" content="article"><link rel="shortcut icon" href="https://www.finecloud.ch/media/website/finecloud.png" type="image/png"><link rel="stylesheet" href="https://www.finecloud.ch/assets/css/style.css?v=39da73365516a098a9b73b721fc970e2"><script type="application/ld+json">{"@context":"http://schema.org","@type":"Article","mainEntityOfPage":{"@type":"WebPage","@id":"https://www.finecloud.ch/data-transfer-objects.html"},"headline":"Data Transfer Objects","datePublished":"2023-04-10T08:46","dateModified":"2023-04-11T19:53","description":"Data Transfer Objects DTOs - Data Transfer Objects DTOs are simple Java POJOs DTOs are data structures, generally should NOT have behavior DTOs are objects used to transfer data between producers and consumers Controller models are typically DTOs Why Not Entities? Database Entities are also…","author":{"@type":"Person","name":"Finecloud","url":"https://www.finecloud.ch/authors/finecloud/"},"publisher":{"@type":"Organization","name":"Finecloud"}}</script><meta name="google-site-verification" content="seFY9U12uiEq5U3_MyZiX6XWzk0AVFl9zITr2ZKsytY"></head><body><div class="site-container"><header class="top" id="js-header"><a class="logo" href="https://www.finecloud.ch/">Finecloud</a><nav class="navbar js-navbar"><button class="navbar__toggle js-toggle" aria-label="Menu" aria-haspopup="true" aria-expanded="false"><span class="navbar__toggle-box"><span class="navbar__toggle-inner">Menu</span></span></button><ul class="navbar__menu"><li><a href="https://www.finecloud.ch/" target="_self">Blog</a></li><li><a href="https://www.finecloud.ch/tags/" target="_self">Tags</a></li></ul></nav><div class="search"><div class="search__overlay js-search-overlay"><div class="search__overlay-inner"><form action="https://www.finecloud.ch/search.html" class="search__form"><input class="search__input js-search-input" type="search" name="q" placeholder="search..." aria-label="search..." autofocus="autofocus"></form><button class="search__close js-search-close" aria-label="Close">Close</button></div></div><button class="search__btn js-search-btn" aria-label="Search"><svg role="presentation" focusable="false"><use xlink:href="https://www.finecloud.ch/assets/svg/svg-map.svg#search"/></svg></button></div></header><main><article class="post"><div class="hero"><figure class="hero__image hero__image--overlay"><img src="https://www.finecloud.ch/media/website/download.jpg" srcset="https://www.finecloud.ch/media/website/responsive/download-xs.jpg 300w, https://www.finecloud.ch/media/website/responsive/download-sm.jpg 480w, https://www.finecloud.ch/media/website/responsive/download-md.jpg 768w, https://www.finecloud.ch/media/website/responsive/download-lg.jpg 1024w, https://www.finecloud.ch/media/website/responsive/download-xl.jpg 1360w, https://www.finecloud.ch/media/website/responsive/download-2xl.jpg 1600w" sizes="100vw" loading="eager" alt=""></figure><header class="hero__content"><div class="wrapper"><div class="post__meta"><time datetime="2023-04-10T08:46">April 10, 2023</time></div><h1>Data Transfer Objects</h1></div></header></div><div class="wrapper post__entry"><h2>Data Transfer Objects</h2><ul><li>DTOs - Data Transfer Objects</li><li>DTOs are simple Java POJOs</li><li>DTOs are data structures, generally should NOT have behavior</li><li>DTOs are objects used to transfer data between producers and consumers</li><li>Controller models are typically DTOs</li></ul><h2>Why Not Entities?</h2><ul><li>Database Entities are also POJOs, why can’t we use those?</li><li>For simple applications you can</li><li>Spring Data REST exposes database entities directly</li><li>Database entities can “leak” data to client tier</li><li>As applications become more complex, having the separation becomes more important</li><li>The needs of the consumers are different than the needs of persistence</li><li>DTOs can be optimized for JSON serialization and deserialization</li></ul><h2>Type Conversions</h2><ul><li>Type Conversions are often done within methods</li><li>Best practice is to use dedicated converters</li><li>Single Responsibility Principle</li><li>Spring Framework provides an Interface called “Converter” with generics</li><li>Can be used with conjunction with Conversion service</li><li>MapStruct is a code generator which automates generation of type converters</li></ul><h2>MapStruct</h2><ul><li>MapStruct is a code generator</li><li>You provide the interface, MapStruct generates the implementation</li><li>Works like Lombok via annotation processing during code compile</li><li>Has good Spring integration - can generate Spring Converters or Spring Components</li><li>You can use Mapstruct Components for injection into services<br><br><br></li></ul></div><footer class="wrapper post__footer"><p class="post__last-updated">This article was updated on April 11, 2023</p><ul class="post__tag"><li><a href="https://www.finecloud.ch/tags/java/">java</a></li><li><a href="https://www.finecloud.ch/tags/softwareentwicklung/">software development</a></li></ul><div class="post__share"></div></footer></article><nav class="post__nav"><div class="post__nav-inner"><div class="post__nav-prev"><svg width="1.041em" height="0.416em" aria-hidden="true"><use xlink:href="https://www.finecloud.ch/assets/svg/svg-map.svg#arrow-prev"/></svg> <a href="https://www.finecloud.ch/spring-exception-handling.html" class="post__nav-link" rel="prev"><span>Previous</span> Spring Exception Handling</a></div><div class="post__nav-next"><a href="https://www.finecloud.ch/data-validation-overview.html" class="post__nav-link" rel="next"><span>Next</span> Data Validation Overview </a><svg width="1.041em" height="0.416em" aria-hidden="true"><use xlink:href="https://www.finecloud.ch/assets/svg/svg-map.svg#arrow-next"/></svg></div></div></nav><div class="post__related related"><div class="wrapper"><h2 class="h5 related__title">You should also read:</h2><article class="related__item"><div class="feed__meta"><time datetime="2023-05-02T20:07" class="feed__date">Mai 2, 2023</time></div><h3 class="h1"><a href="https://www.finecloud.ch/data-validation-overview.html">Data Validation Overview</a></h3></article><article class="related__item"><div class="feed__meta"><time datetime="2023-01-17T20:13" class="feed__date">Januar 17, 2023</time></div><h3 class="h1"><a href="https://www.finecloud.ch/javascript-objects.html">JavaScript objects</a></h3></article><article class="related__item"><div class="feed__meta"><time datetime="2022-09-13T11:41" class="feed__date">September 13, 2022</time></div><h3 class="h1"><a href="https://www.finecloud.ch/java-and-databases-use-sql-joins.html">Java and databases use SQL joins</a></h3></article></div></div></main><footer class="footer"><div class="footer__copyright"><p>Powered by Publii</p></div><button onclick="backToTopFunction()" id="backToTop" class="footer__bttop" aria-label="Back to top" title="Back to top"><svg><use xlink:href="https://www.finecloud.ch/assets/svg/svg-map.svg#toparrow"/></svg></button></footer></div><script>window.publiiThemeMenuConfig = {
mobileMenuMode: 'sidebar',
animationSpeed: 300,
submenuWidth: 'auto',
doubleClickTime: 500,
mobileMenuExpandableSubmenus: true,
relatedContainerForOverlayMenuSelector: '.top',
};</script><script defer="defer" src="https://www.finecloud.ch/assets/js/scripts.min.js?v=6ca8b60e6534a3888de1205e82df8528"></script><script>var images = document.querySelectorAll('img[loading]');
for (var i = 0; i < images.length; i++) {
if (images[i].complete) {
images[i].classList.add('is-loaded');
} else {
images[i].addEventListener('load', function () {
this.classList.add('is-loaded');
}, false);
}
}</script><script defer="defer" src="https://www.finecloud.ch/media/plugins/syntaxHighlighter/prism.js"></script></body></html>