From 5bc61c8c28e770f9b2805a3dc56bfde5fdbbc238 Mon Sep 17 00:00:00 2001 From: siavash Date: Wed, 9 Dec 2020 10:51:24 +0330 Subject: [PATCH] #1569 DTO pattern implementation using Enums (#1570) * #1569 DTO pattern implemented using Enums * #1569 DTO pattern implemented using Enums * #1569 adding some java docs * #1569 some changes in java doc and code style * #1569 some changes in java doc and code style * #1569 some changes in java doc and code style * #1569 some changes in java doc and code style * #1569 adding suggested extra line * #1569 license added to pom.xml * #1569 more checkstyle problems resolved * #1569 more checkstyle problems resolved * #1569 more checkstyle problems resolved Co-authored-by: siavashsoleymani Co-authored-by: Subhrodip Mohanta --- data-transfer-object-enum-impl/README.md | 54 ++++ .../data-transfer-object-enum-impl.urm.puml | 129 +++++++++ .../etc/dto-enum-uml.png | Bin 0 -> 123167 bytes data-transfer-object-enum-impl/pom.xml | 61 ++++ .../com/iluwatar/datatransferenum/App.java | 59 ++++ .../iluwatar/datatransferenum/Product.java | 91 ++++++ .../iluwatar/datatransferenum/ProductDto.java | 264 ++++++++++++++++++ .../datatransferenum/ProductResource.java | 71 +++++ .../iluwatar/datatransferenum/AppTest.java | 44 +++ pom.xml | 1 + 10 files changed, 774 insertions(+) create mode 100644 data-transfer-object-enum-impl/README.md create mode 100644 data-transfer-object-enum-impl/etc/data-transfer-object-enum-impl.urm.puml create mode 100644 data-transfer-object-enum-impl/etc/dto-enum-uml.png create mode 100644 data-transfer-object-enum-impl/pom.xml create mode 100644 data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/App.java create mode 100644 data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/Product.java create mode 100644 data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/ProductDto.java create mode 100644 data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/ProductResource.java create mode 100644 data-transfer-object-enum-impl/src/test/java/com/iluwatar/datatransferenum/AppTest.java diff --git a/data-transfer-object-enum-impl/README.md b/data-transfer-object-enum-impl/README.md new file mode 100644 index 000000000..7e6dbc365 --- /dev/null +++ b/data-transfer-object-enum-impl/README.md @@ -0,0 +1,54 @@ +--- +layout: pattern +title: Data Transfer Object +folder: data-transfer-object +permalink: /patterns/data-transfer-object/ +categories: Architectural +tags: + - Performance +--- + +## Intent + +Pass data with multiple attributes in one shot from client to server, to avoid multiple calls to +remote server. + +## Explanation + +Real world example + +> We need to fetch information about customers from remote database. Instead of querying the +> attributes one at a time, we use DTOs to transfer all the relevant attributes in a single shot. + +In plain words + +> Using DTO relevant information can be fetched with a single backend query. + +Wikipedia says + +> In the field of programming a data transfer object (DTO) is an object that carries data between +> processes. The motivation for its use is that communication between processes is usually done +> resorting to remote interfaces (e.g. web services), where each call is an expensive operation. +> Because the majority of the cost of each call is related to the round-trip time between the client +> and the server, one way of reducing the number of calls is to use an object (the DTO) that +> aggregates the data that would have been transferred by the several calls, but that is served by +> one call only. + +## Class diagram + +![alt text](./etc/dto-enum-uml.png "data-transfer-object") + +## Applicability + +Use the Data Transfer Object pattern when: + +* The client is asking for multiple information. And the information is related. +* When you want to boost the performance to get resources. +* You want reduced number of remote calls. + +## Credits + +* [Design Pattern - Transfer Object Pattern](https://www.tutorialspoint.com/design_pattern/transfer_object_pattern.htm) +* [Data Transfer Object](https://msdn.microsoft.com/en-us/library/ff649585.aspx) +* [J2EE Design Patterns](https://www.amazon.com/gp/product/0596004273/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596004273&linkCode=as2&tag=javadesignpat-20&linkId=f27d2644fbe5026ea448791a8ad09c94) +* [Patterns of Enterprise Application Architecture](https://www.amazon.com/gp/product/0321127420/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0321127420&linkCode=as2&tag=javadesignpat-20&linkId=014237a67c9d46f384b35e10151956bd) diff --git a/data-transfer-object-enum-impl/etc/data-transfer-object-enum-impl.urm.puml b/data-transfer-object-enum-impl/etc/data-transfer-object-enum-impl.urm.puml new file mode 100644 index 000000000..e6426c392 --- /dev/null +++ b/data-transfer-object-enum-impl/etc/data-transfer-object-enum-impl.urm.puml @@ -0,0 +1,129 @@ +@startuml +package com.iluwatar.datatransferenum { + class App { + - LOGGER : Logger {static} + + App() + + main(args : String[]) {static} + } + class Product { + - cost : Double + - id : Long + - name : String + - price : Double + - supplier : String + + Product() + + getCost() : Double + + getId() : Long + + getName() : String + + getPrice() : Double + + getSupplier() : String + + setCost(cost : Double) : Product + + setId(id : Long) : Product + + setName(name : String) : Product + + setPrice(price : Double) : Product + + setSupplier(supplier : String) : Product + + toString() : String + } + enum ProductDTO { + + valueOf(name : String) : ProductDTO {static} + + values() : ProductDTO[] {static} + } + -interface Cost { + + getCost() : Double {abstract} + } + -interface Id { + + getId() : Long {abstract} + } + -interface Name { + + getName() : String {abstract} + } + -interface Price { + + getPrice() : Double {abstract} + } + enum Request { + + valueOf(name : String) : Request {static} + + values() : Request[] {static} + } + class Create { + - cost : Double + - name : String + - price : Double + - supplier : String + + Create() + + getCost() : Double + + getName() : String + + getPrice() : Double + + getSupplier() : String + + setCost(cost : Double) : Create + + setName(name : String) : Create + + setPrice(price : Double) : Create + + setSupplier(supplier : String) : Create + } + enum Response { + + valueOf(name : String) : Response {static} + + values() : Response[] {static} + } + class Private { + - cost : Double + - id : Long + - name : String + - price : Double + + Private() + + getCost() : Double + + getId() : Long + + getName() : String + + getPrice() : Double + + setCost(cost : Double) : Private + + setId(id : Long) : Private + + setName(name : String) : Private + + setPrice(price : Double) : Private + + toString() : String + } + class Public { + - id : Long + - name : String + - price : Double + + Public() + + getId() : Long + + getName() : String + + getPrice() : Double + + setId(id : Long) : Public + + setName(name : String) : Public + + setPrice(price : Double) : Public + + toString() : String + } + -interface Supplier { + + getSupplier() : String {abstract} + } + class ProductResource { + - products : List + + ProductResource(products : List) + + getAllProductsForAdmin() : List + + getAllProductsForCustomer() : List + + getProducts() : List + + save(createProductDTO : Create) + } +} +Create ..+ Request +Request ..+ ProductDTO +Private ..+ Response +Supplier ..+ ProductDTO +Name ..+ ProductDTO +ProductResource --> "-products" Product +Public ..+ Response +Id ..+ ProductDTO +Price ..+ ProductDTO +Response ..+ ProductDTO +Cost ..+ ProductDTO +Create ..|> Name +Create ..|> Price +Create ..|> Cost +Create ..|> Supplier +Private ..|> Id +Private ..|> Name +Private ..|> Price +Private ..|> Cost +Public ..|> Id +Public ..|> Name +Public ..|> Price +@enduml diff --git a/data-transfer-object-enum-impl/etc/dto-enum-uml.png b/data-transfer-object-enum-impl/etc/dto-enum-uml.png new file mode 100644 index 0000000000000000000000000000000000000000..57e9a1ab520db212a7ff5635c5b1b2125af7ffe6 GIT binary patch literal 123167 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 literal 0 HcmV?d00001 diff --git a/data-transfer-object-enum-impl/pom.xml b/data-transfer-object-enum-impl/pom.xml new file mode 100644 index 000000000..74c8a3a6c --- /dev/null +++ b/data-transfer-object-enum-impl/pom.xml @@ -0,0 +1,61 @@ + + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.24.0-SNAPSHOT + + data-transfer-object-enum-impl + + + org.junit.jupiter + junit-jupiter-engine + test + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + + + com.iluwatar.datatransferenum.App + + + + + + + + + diff --git a/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/App.java b/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/App.java new file mode 100644 index 000000000..9c80d07cc --- /dev/null +++ b/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/App.java @@ -0,0 +1,59 @@ +package com.iluwatar.datatransferenum; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The Data Transfer Object pattern is a design pattern in which an data transfer object is used to + * serve related information together to avoid multiple call for each piece of information. + * + *

In this example, ({@link App}) as as product details consumer i.e. client to + * request for product details to server. + * + *

productResource ({@link ProductResource}) act as server to serve product information. And + * The productDto ({@link ProductDto} is data transfer object to share product information. + */ +public class App { + + private static final Logger LOGGER = LoggerFactory.getLogger(App.class); + + /** + * Method as act client and request to server for details. + * + * @param args program argument. + */ + public static void main(String[] args) { + Product tv = + new Product().setId(1L).setName("TV").setSupplier("Sony").setPrice(1000D).setCost(1090D); + Product microwave = + new Product().setId(2L).setName("microwave").setSupplier("Delonghi").setPrice(1000D) + .setCost(1090D); + Product refrigerator = + new Product().setId(3L).setName("refrigerator").setSupplier("Botsch").setPrice(1000D) + .setCost(1090D); + Product airConditioner = + new Product().setId(4L).setName("airConditioner").setSupplier("LG").setPrice(1000D) + .setCost(1090D); + List products = + new ArrayList<>(Arrays.asList(tv, microwave, refrigerator, airConditioner)); + ProductResource productResource = new ProductResource(products); + + LOGGER.info("####### List of products including sensitive data just for admins: \n {}", + Arrays.toString(productResource.getAllProductsForAdmin().toArray())); + LOGGER.info("####### List of products for customers: \n {}", + Arrays.toString(productResource.getAllProductsForCustomer().toArray())); + + LOGGER.info("####### Going to save Sony PS5 ..."); + ProductDto.Request.Create createProductRequestDto = new ProductDto.Request.Create() + .setName("PS5") + .setCost(1000D) + .setPrice(1220D) + .setSupplier("Sony"); + productResource.save(createProductRequestDto); + LOGGER.info("####### List of products after adding PS5: {}", + Arrays.toString(productResource.getProducts().toArray())); + } +} diff --git a/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/Product.java b/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/Product.java new file mode 100644 index 000000000..96758baf4 --- /dev/null +++ b/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/Product.java @@ -0,0 +1,91 @@ +package com.iluwatar.datatransferenum; + +/** + * {@link Product} is a entity class for product entity. This class act as entity in the demo. + */ +public final class Product { + private Long id; + private String name; + private Double price; + private Double cost; + private String supplier; + + /** + * Constructor. + * + * @param id product id + * @param name product name + * @param price product price + * @param cost product cost + * @param supplier product supplier + */ + public Product(Long id, String name, Double price, Double cost, String supplier) { + this.id = id; + this.name = name; + this.price = price; + this.cost = cost; + this.supplier = supplier; + } + + /** + * Constructor. + */ + public Product() { + } + + public Long getId() { + return id; + } + + public Product setId(Long id) { + this.id = id; + return this; + } + + public String getName() { + return name; + } + + public Product setName(String name) { + this.name = name; + return this; + } + + public Double getPrice() { + return price; + } + + public Product setPrice(Double price) { + this.price = price; + return this; + } + + public Double getCost() { + return cost; + } + + public Product setCost(Double cost) { + this.cost = cost; + return this; + } + + public String getSupplier() { + return supplier; + } + + public Product setSupplier(String supplier) { + this.supplier = supplier; + return this; + } + + @Override + public String toString() { + return "Product{" + + "id=" + id + + ", name='" + name + '\'' + + ", price=" + price + + ", cost=" + cost + + ", supplier='" + supplier + '\'' + + '}'; + } +} diff --git a/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/ProductDto.java b/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/ProductDto.java new file mode 100644 index 000000000..49d08d896 --- /dev/null +++ b/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/ProductDto.java @@ -0,0 +1,264 @@ +package com.iluwatar.datatransferenum; + +/** + * {@link ProductDto} is a data transfer object POJO. + * Instead of sending individual information to + * client We can send related information together in POJO. + * + *

Dto will not have any business logic in it. + */ +public enum ProductDto { + ; + + /** + * This is Request class which consist of Create or any other request DTO's + * you might want to use in your API. + */ + public enum Request { + ; + + /** + * This is Create dto class for requesting create new product. + */ + public static final class Create implements Name, Price, Cost, Supplier { + private String name; + private Double price; + private Double cost; + private String supplier; + + @Override + public String getName() { + return name; + } + + public Create setName(String name) { + this.name = name; + return this; + } + + @Override + public Double getPrice() { + return price; + } + + public Create setPrice(Double price) { + this.price = price; + return this; + } + + @Override + public Double getCost() { + return cost; + } + + public Create setCost(Double cost) { + this.cost = cost; + return this; + } + + @Override + public String getSupplier() { + return supplier; + } + + public Create setSupplier(String supplier) { + this.supplier = supplier; + return this; + } + } + } + + /** + * This is Response class which consist of any response DTO's + * you might want to provide to your clients. + */ + public enum Response { + ; + + /** + * This is Public dto class for API response with the lowest data security. + */ + public static final class Public implements Id, Name, Price { + private Long id; + private String name; + private Double price; + + @Override + public Long getId() { + return id; + } + + public Public setId(Long id) { + this.id = id; + return this; + } + + @Override + public String getName() { + return name; + } + + public Public setName(String name) { + this.name = name; + return this; + } + + @Override + public Double getPrice() { + return price; + } + + public Public setPrice(Double price) { + this.price = price; + return this; + } + + @Override + public String toString() { + return "Public{" + + "id=" + + id + + ", name='" + + name + + '\'' + + ", price=" + + price + + '}'; + } + } + + /** + * This is Private dto class for API response with the highest data security. + */ + public static final class Private implements Id, Name, Price, Cost { + private Long id; + private String name; + private Double price; + private Double cost; + + @Override + public Long getId() { + return id; + } + + public Private setId(Long id) { + this.id = id; + return this; + } + + @Override + public String getName() { + return name; + } + + public Private setName(String name) { + this.name = name; + return this; + } + + @Override + public Double getPrice() { + return price; + } + + public Private setPrice(Double price) { + this.price = price; + return this; + } + + @Override + public Double getCost() { + return cost; + } + + public Private setCost(Double cost) { + this.cost = cost; + return this; + } + + @Override + public String toString() { + return "Private{" + + + "id=" + + id + + + ", name='" + + name + + '\'' + + + ", price=" + + price + + + ", cost=" + + cost + + + '}'; + } + } + } + + /** + * Use this interface whenever you want to provide the product Id in your DTO. + */ + private interface Id { + /** + * Unique identifier of the product. + * + * @return : id of the product. + */ + Long getId(); + } + + /** + * Use this interface whenever you want to provide the product Name in your DTO. + */ + private interface Name { + /** + * The name of the product. + * + * @return : name of the product. + */ + String getName(); + } + + /** + * Use this interface whenever you want to provide the product Price in your DTO. + */ + private interface Price { + /** + * The amount we sell a product for. + * This data is not confidential + * + * @return : price of the product. + */ + Double getPrice(); + } + + /** + * Use this interface whenever you want to provide the product Cost in your DTO. + */ + private interface Cost { + /** + * The amount that it costs us to purchase this product + * For the amount we sell a product for, see the {@link Price Price} parameter. + * This data is confidential + * + * @return : cost of the product. + */ + Double getCost(); + } + + /** + * Use this interface whenever you want to provide the product Supplier in your DTO. + */ + private interface Supplier { + /** + * The name of supplier of the product or its manufacturer. + * This data is highly confidential + * + * @return : supplier of the product. + */ + String getSupplier(); + } +} diff --git a/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/ProductResource.java b/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/ProductResource.java new file mode 100644 index 000000000..5940982b1 --- /dev/null +++ b/data-transfer-object-enum-impl/src/main/java/com/iluwatar/datatransferenum/ProductResource.java @@ -0,0 +1,71 @@ +package com.iluwatar.datatransferenum; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * The resource class which serves product information. This class act as server in the demo. Which + * has all product details. + */ +public class ProductResource { + private final List products; + + /** + * Initialise resource with existing products. + * + * @param products initialize resource with existing products. Act as database. + */ + public ProductResource(final List products) { + this.products = products; + } + + /** + * Get all products. + * + * @return : all products in list but in the scheme of private dto. + */ + public List getAllProductsForAdmin() { + return products + .stream() + .map(p -> new ProductDto.Response.Private().setId(p.getId()).setName(p.getName()) + .setCost(p.getCost()) + .setPrice(p.getPrice())) + .collect(Collectors.toList()); + } + + /** + * Get all products. + * + * @return : all products in list but in the scheme of public dto. + */ + public List getAllProductsForCustomer() { + return products + .stream() + .map(p -> new ProductDto.Response.Public().setId(p.getId()).setName(p.getName()) + .setPrice(p.getPrice())) + .collect(Collectors.toList()); + } + + /** + * Save new product. + * + * @param createProductDto save new product to list. + */ + public void save(ProductDto.Request.Create createProductDto) { + products.add(new Product() + .setId((long) (products.size() + 1)) + .setName(createProductDto.getName()) + .setSupplier(createProductDto.getSupplier()) + .setPrice(createProductDto.getPrice()) + .setCost(createProductDto.getCost())); + } + + /** + * List of all products in an entity representation. + * + * @return : all the products entity that stored in the products list + */ + public List getProducts() { + return products; + } +} diff --git a/data-transfer-object-enum-impl/src/test/java/com/iluwatar/datatransferenum/AppTest.java b/data-transfer-object-enum-impl/src/test/java/com/iluwatar/datatransferenum/AppTest.java new file mode 100644 index 000000000..bba131e64 --- /dev/null +++ b/data-transfer-object-enum-impl/src/test/java/com/iluwatar/datatransferenum/AppTest.java @@ -0,0 +1,44 @@ +/* + * The MIT License + * Copyright © 2014-2019 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package com.iluwatar.datatransferenum; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + + +import org.junit.jupiter.api.Test; + +class AppTest { + + /** + * Issue: Add at least one assertion to this test case. + *

+ * Solution: Inserted assertion to check whether the execution of the main method in {@link App#main(String[])} + * throws an exception. + */ + + @Test + void shouldExecuteApplicationWithoutException() { + assertDoesNotThrow(() -> App.main(new String[] {})); + } +} diff --git a/pom.xml b/pom.xml index 86cefa133..b6556245b 100644 --- a/pom.xml +++ b/pom.xml @@ -199,6 +199,7 @@ filterer factory separated-interface + data-transfer-object-enum-impl -- GitLab