Design Pattern

Transfer Object Pattern – Core J2EE Patterns

<p>It is one of the <strong><a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;core-j2ee-patterns-best-design-practices&sol;">Java EE design patterns<&sol;a><&sol;strong>&period; We need <strong>Transfer Object<&sol;strong> when we need to pass the data across various attributes in a packet to the server&period; <strong>Value Object<&sol;strong> is another name for transfer object&period; The <strong>transfer object<&sol;strong> is just a class of POJO which has a method of the getter and setter&period; It is serializable which means we can transfer it through the network&period;<&sol;p>&NewLine;<div style&equals;"background-color&colon; &num;f2f9fc&semi; border-radius&colon; 3px&semi; border&colon; 1px solid &num;c9e6f2&semi; line-height&colon; 1&period;45&semi; padding&colon; 16px 16px 16px 16px&semi;">&NewLine;<h2 dir&equals;"ltr">Spring 5 Design Pattern Book<&sol;h2>&NewLine;<div dir&equals;"ltr" style&equals;"color&colon; &num;20124d&semi; font-family&colon; 'calibri' &comma; sans-serif&semi; font-size&colon; 13pt&semi; text-align&colon; justify&semi;">You could purchase my <strong>Spring 5 book<&sol;strong> that is with title name &&num;8220&semi;<strong>Spring 5 Design Patterns<&sol;strong>&&num;8220&semi;&period; This book is available on the <a href&equals;"https&colon;&sol;&sol;www&period;amazon&period;in&sol;Spring-Design-Patterns-Dinesh-Rajput&sol;dp&sol;1788299450&sol;ref&equals;sr&lowbar;1&lowbar;1&quest;ie&equals;UTF8&amp&semi;qid&equals;1507925340&amp&semi;sr&equals;8-1&amp&semi;keywords&equals;spring&plus;5&plus;design&plus;pattern"><strong>Amazon<&sol;strong><&sol;a> and <a href&equals;"https&colon;&sol;&sol;www&period;packtpub&period;com&sol;application-development&sol;spring-5-design-patterns"><strong>Packt<&sol;strong><&sol;a> publisher website&period; Learn various <strong>design patterns<&sol;strong> and <strong>best practices<&sol;strong> in Spring 5 and use them to solve common design problems&period; You could use author discount to purchase this book by using code- &&num;8220&semi;<strong>AUTHDIS40<&sol;strong>&&num;8220&semi;&period;<&sol;div>&NewLine;<div dir&equals;"ltr"><&sol;div>&NewLine;<div dir&equals;"ltr"><a href&equals;"https&colon;&sol;&sol;www&period;amazon&period;in&sol;Spring-Design-Patterns-Dinesh-Rajput&sol;dp&sol;1788299450&sol;ref&equals;sr&lowbar;1&lowbar;1&quest;s&equals;books&amp&semi;ie&equals;UTF8&amp&semi;qid&equals;1512607966&amp&semi;sr&equals;1-1&amp&semi;keywords&equals;dinesh&plus;rajput"><br &sol;>&NewLine;<img class&equals;"aligncenter wp-image-3053 size-medium" title&equals;"Spring-5-Design-Pattern" src&equals;"https&colon;&sol;&sol;i0&period;wp&period;com&sol;dineshonjava&period;com&sol;wp-content&sol;uploads&sol;2013&sol;03&sol;Spring-5-design-pattern&period;jpg&quest;resize&equals;243&percnt;2C300&amp&semi;ssl&equals;1" alt&equals;"Spring-5-Design-Pattern" width&equals;"243" height&equals;"300" &sol;><&sol;a><&sol;div>&NewLine;<&sol;div>&NewLine;<h2>Transfer Object Pattern<&sol;h2>&NewLine;<p>The transfer object does not acquire any behavior&period; The class known as server-side business is generally responsible for fetching data and filling the POJO then&comma; sending it to the respective client or passing it the value&period; Client objects&comma; the object is in read-only mode&period; The clients are capable for creating their own transfer objects&period; They can even pass object to servers in order to update the values in databases in one go&period;<&sol;p>&NewLine;<h2>UML Class Diagram of the Transfer Object<&sol;h2>&NewLine;<p>Let&&num;8217&semi;s see the following class diagram of the transfer object&period;<&sol;p>&NewLine;<p><img class&equals;"aligncenter size-full wp-image-4066" src&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-content&sol;uploads&sol;2018&sol;01&sol;Transfer-Object&period;gif" alt&equals;"Transfer Object" width&equals;"491" height&equals;"245" &sol;><&sol;p>&NewLine;<div style&equals;"text-align&colon; left&semi;">&NewLine;<blockquote>&NewLine;<p><strong>also read&colon;<&sol;strong><&sol;p>&NewLine;<ul style&equals;"text-align&colon; left&semi;">&NewLine;<li><a title&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;business-delegate&sol;" href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;business-delegate&sol;">Business Delegate Pattern<&sol;a><&sol;li>&NewLine;<li><a title&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;service-locator&sol;" href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;service-locator&sol;">Service Locator Pattern<&sol;a><&sol;li>&NewLine;<li><a title&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;session-facade&sol;" href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;session-facade&sol;">Session Facade Pattern<&sol;a><&sol;li>&NewLine;<li><a title&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;business-object&sol;" href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;business-object&sol;">Business Object Pattern<&sol;a><&sol;li>&NewLine;<li><a title&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;composite-entity-pattern&sol;" href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;composite-entity-pattern&sol;">Composite Entity Pattern<&sol;a><&sol;li>&NewLine;<&sol;ul>&NewLine;<&sol;blockquote>&NewLine;<&sol;div>&NewLine;<p>It requires certain components to implement the transfer object design pattern&period; Each of these components has certain tasks to perform and certain problems to cater&period; These components include client&comma; business object&comma; and transfer object&period; The client object is responsible for representing the client of the enterprise bean&period;<&sol;p>&NewLine;<ul>&NewLine;<li><strong>The client<&sol;strong> can be the end user of the app&period;<&sol;li>&NewLine;<li><strong>The business object<&sol;strong> creates a transfer object and returns it to the respective client&comma; when or if requested&period; The business object receives the data from the client in the form of a transfer object&period; It also uses this data in order to perform an update&period;<&sol;li>&NewLine;<li><strong>The transfer object<&sol;strong> is&comma; in fact&comma; a Javascript&period; The class known as Transfer object is able to provide a constructor which may accept all the needed attributes in order to create the transfer object&period; The constructor also accepts the entire entity bean attribute values that a Transfer object holds&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<h2>Sample Implementation of the Transfer Object<&sol;h2>&NewLine;<p>Let&&num;8217&semi;s see the following sample implementation of the Transfer Object&period;<&sol;p>&NewLine;<h3>Step 1&colon; Let&&num;8217&semi;s create Transfer Object&period;<&sol;h3>&NewLine;<p><strong>EmployeeVO&period;java<&sol;strong><&sol;p>&NewLine;<pre class&equals;"highlight">&sol;&ast;&ast; &NewLine; &ast; &NewLine; &ast;&sol; &NewLine;package com&period;doj&period;patterns&period;j2ee&period;transferobject&semi; &NewLine; &NewLine;&sol;&ast;&ast; &NewLine; &ast; &commat;author Dinesh&period;Rajput &NewLine; &ast; &NewLine; &ast;&sol; &NewLine;public class EmployeeVO &lbrace; &NewLine;&Tab; &NewLine;&Tab;private String name&semi; &NewLine;&Tab;private int empNo&semi; &NewLine;&Tab; &NewLine;&Tab;public EmployeeVO&lpar;String name&comma; int empNo&rpar; &lbrace; &NewLine;&Tab;&Tab;super&lpar;&rpar;&semi; &NewLine;&Tab;&Tab;this&period;name &equals; name&semi; &NewLine;&Tab;&Tab;this&period;empNo &equals; empNo&semi; &NewLine;&Tab;&rcub; &NewLine;&Tab;public String getName&lpar;&rpar; &lbrace; &NewLine;&Tab;&Tab;return name&semi; &NewLine;&Tab;&rcub; &NewLine;&Tab;public void setName&lpar;String name&rpar; &lbrace; &NewLine;&Tab;&Tab;this&period;name &equals; name&semi; &NewLine;&Tab;&rcub; &NewLine;&Tab;public int getEmpNo&lpar;&rpar; &lbrace; &NewLine;&Tab;&Tab;return empNo&semi; &NewLine;&Tab;&rcub; &NewLine;&Tab;public void setEmpNo&lpar;int empNo&rpar; &lbrace; &NewLine;&Tab;&Tab;this&period;empNo &equals; empNo&semi; &NewLine;&Tab;&rcub; &NewLine;&Tab; &NewLine;&rcub; &NewLine; &NewLine;<&sol;pre>&NewLine;<h3>Step 2&colon; Let&&num;8217&semi;s create Business Object&period;<&sol;h3>&NewLine;<p><strong>EmployeeBO&period;java<&sol;strong><&sol;p>&NewLine;<pre class&equals;"highlight">&sol;&ast;&ast; &NewLine; &ast; &NewLine; &ast;&sol; &NewLine;package com&period;doj&period;patterns&period;j2ee&period;transferobject&semi; &NewLine; &NewLine;import java&period;util&period;ArrayList&semi; &NewLine;import java&period;util&period;List&semi; &NewLine; &NewLine;&sol;&ast;&ast; &NewLine; &ast; &commat;author Dinesh&period;Rajput &NewLine; &ast; &NewLine; &ast;&sol; &NewLine;public class EmployeeBO &lbrace; &NewLine;&Tab; &NewLine;&Tab;List employees&semi; &NewLine; &NewLine;&Tab;public EmployeeBO&lpar;&rpar;&lbrace; &NewLine;&Tab;&Tab;employees &equals; new ArrayList&lt&semi;&gt&semi;&lpar;&rpar;&semi; &NewLine;&Tab;&Tab;EmployeeVO employee1 &equals; new EmployeeVO&lpar;"Dinesh"&comma;0&rpar;&semi; &NewLine;&Tab;&Tab;EmployeeVO employee2 &equals; new EmployeeVO&lpar;"Arnav"&comma;1&rpar;&semi; &NewLine;&Tab;&Tab;employees&period;add&lpar;employee1&rpar;&semi; &NewLine;&Tab;&Tab;employees&period;add&lpar;employee2&rpar;&semi;&Tab;&Tab; &NewLine;&Tab;&rcub; &NewLine;&Tab;public void deleteEmployee&lpar;EmployeeVO employee&rpar; &lbrace; &NewLine;&Tab;&Tab;employees&period;remove&lpar;employee&period;getEmpNo&lpar;&rpar;&rpar;&semi; &NewLine;&Tab;&Tab;System&period;out&period;println&lpar;"Employee&colon; Roll No " &plus; employee&period;getEmpNo&lpar;&rpar; &plus; "&comma; deleted from database"&rpar;&semi; &NewLine;&Tab;&rcub; &NewLine; &NewLine;&Tab;public List getAllEmployees&lpar;&rpar; &lbrace; &NewLine;&Tab;&Tab;return employees&semi;&Tab; &NewLine;&Tab;&rcub; &NewLine; &NewLine;&Tab;public EmployeeVO getEmployee&lpar;int empNo&rpar; &lbrace; &NewLine;&Tab;&Tab;return employees&period;get&lpar;empNo&rpar;&semi; &NewLine;&Tab;&rcub; &NewLine; &NewLine;&Tab;public void updateEmployee&lpar;EmployeeVO employee&rpar; &lbrace; &NewLine;&Tab;&Tab;employees&period;get&lpar;employee&period;getEmpNo&lpar;&rpar;&rpar;&period;setName&lpar;employee&period;getName&lpar;&rpar;&rpar;&semi; &NewLine;&Tab;&Tab;System&period;out&period;println&lpar;"Employee&colon; Emp No " &plus;employee&period;getEmpNo&lpar;&rpar; &plus;"&comma; updated in the database"&rpar;&semi; &NewLine;&Tab;&rcub; &NewLine;&rcub;&Tab; &NewLine; &NewLine;<&sol;pre>&NewLine;<h3>Step 3&colon; Let&&num;8217&semi;s create a demo class and use the EmployeeBO to demonstrate Transfer Object Design Pattern&period;<&sol;h3>&NewLine;<p><strong>TransferObjectPatternDemo&period;java<&sol;strong><&sol;p>&NewLine;<pre class&equals;"highlight">&sol;&ast;&ast; &NewLine; &ast; &NewLine; &ast;&sol; &NewLine;package com&period;doj&period;patterns&period;j2ee&period;transferobject&semi; &NewLine; &NewLine;&sol;&ast;&ast; &NewLine; &ast; &commat;author Dinesh&period;Rajput &NewLine; &ast; &NewLine; &ast;&sol; &NewLine;public class TransferObjectPatternDemo &lbrace; &NewLine;&Tab; &NewLine;&Tab;public static void main&lpar;String&lbrack;&rsqb; args&rpar; &lbrace; &NewLine;&Tab;&Tab;EmployeeBO EmployeeBusinessObject &equals; new EmployeeBO&lpar;&rpar;&semi; &NewLine; &NewLine;&Tab;&Tab;&sol;&sol;print all Employees &NewLine;&Tab;&Tab;for &lpar;EmployeeVO employee &colon; EmployeeBusinessObject&period;getAllEmployees&lpar;&rpar;&rpar; &lbrace; &NewLine;&Tab;&Tab;&Tab;System&period;out&period;println&lpar;"Employee&colon; &lbrack;Emp No &colon; " &plus; employee&period;getEmpNo&lpar;&rpar; &plus; "&comma; Name &colon; " &plus; employee&period;getName&lpar;&rpar; &plus; " &rsqb;"&rpar;&semi; &NewLine;&Tab;&Tab;&rcub; &NewLine; &NewLine;&Tab;&Tab;&sol;&sol;update Employee &NewLine;&Tab;&Tab;EmployeeVO employee &equals; EmployeeBusinessObject&period;getAllEmployees&lpar;&rpar;&period;get&lpar;0&rpar;&semi; &NewLine;&Tab;&Tab;employee&period;setName&lpar;"Anamika"&rpar;&semi; &NewLine;&Tab;&Tab;EmployeeBusinessObject&period;updateEmployee&lpar;employee&rpar;&semi; &NewLine; &NewLine;&Tab;&Tab;&sol;&sol;get the Employee &NewLine;&Tab;&Tab;employee &equals; EmployeeBusinessObject&period;getEmployee&lpar;0&rpar;&semi; &NewLine;&Tab;&Tab;System&period;out&period;println&lpar;"Employee&colon; &lbrack;Emp No &colon; " &plus; employee&period;getEmpNo&lpar;&rpar; &plus; "&comma; Name &colon; " &plus; employee&period;getName&lpar;&rpar; &plus; " &rsqb;"&rpar;&semi;&Tab; &NewLine;&Tab;&rcub; &NewLine;&rcub; &NewLine; &NewLine;<&sol;pre>&NewLine;<h3>Step 4&colon; Let&&num;8217&semi;s run this demo class and verify the output&period;<&sol;h3>&NewLine;<pre class&equals;"highlight">Employee&colon; &lbrack;Emp No &colon; 0&comma; Name &colon; Dinesh &rsqb; &NewLine;Employee&colon; &lbrack;Emp No &colon; 1&comma; Name &colon; Arnav &rsqb; &NewLine;Employee&colon; Emp No 0&comma; updated in the database &NewLine;Employee&colon; &lbrack;Emp No &colon; 0&comma; Name &colon; Anamika &rsqb; &NewLine; &NewLine;<&sol;pre>&NewLine;<div class&equals;"wp-post-navigation"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <div class&equals;"wp-post-navigation-pre"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;composite-entity-pattern&sol;">Previous<&sol;a> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <&sol;div> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <div class&equals;"wp-post-navigation-next"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;data-access-object&sol;">Next<&sol;a> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <&sol;div> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;<&sol;div>&NewLine;<script type&equals;"text&sol;javascript">&NewLine;jQuery&lpar;document&rpar;&period;ready&lpar;function&lpar;&dollar;&rpar; &lbrace;&NewLine; &dollar;&period;post&lpar;'https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-admin&sol;admin-ajax&period;php'&comma; &lbrace;action&colon; 'mts&lowbar;view&lowbar;count'&comma; id&colon; '4065'&rcub;&rpar;&semi;&NewLine;&rcub;&rpar;&semi;&NewLine;<&sol;script>

Dinesh Rajput

Dinesh Rajput is the chief editor of a website Dineshonjava, a technical blog dedicated to the Spring and Java technologies. It has a series of articles related to Java technologies. Dinesh has been a Spring enthusiast since 2008 and is a Pivotal Certified Spring Professional, an author of a book Spring 5 Design Pattern, and a blogger. He has more than 10 years of experience with different aspects of Spring and Java design and development. His core expertise lies in the latest version of Spring Framework, Spring Boot, Spring Security, creating REST APIs, Microservice Architecture, Reactive Pattern, Spring AOP, Design Patterns, Struts, Hibernate, Web Services, Spring Batch, Cassandra, MongoDB, and Web Application Design and Architecture. He is currently working as a technology manager at a leading product and web development company. He worked as a developer and tech lead at the Bennett, Coleman & Co. Ltd and was the first developer in his previous company, Paytm. Dinesh is passionate about the latest Java technologies and loves to write technical blogs related to it. He is a very active member of the Java and Spring community on different forums. When it comes to the Spring Framework and Java, Dinesh tops the list!

Share
Published by
Dinesh Rajput

Recent Posts

Strategy Design Patterns using Lambda

Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…

4 years ago

Decorator Pattern using Lambda

Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…

4 years ago

Delegating pattern using lambda

Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…

4 years ago

Spring Vs Django- Know The Difference Between The Two

Technology has emerged a lot in the last decade, and now we have artificial intelligence;…

4 years ago

TOP 20 MongoDB INTERVIEW QUESTIONS 2022

Managing a database is becoming increasingly complex now due to the vast amount of data…

4 years ago

Scheduler @Scheduled Annotation Spring Boot

Overview In this article, we will explore Spring Scheduler how we could use it by…

4 years ago