Hướng Dẫn Java Design Pattern

Transfer Object Pattern là gì?

Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được thực hiện Lúc chúng ta muốn truyền tài liệu hỗ tương thân các tầng vào áp dụng, thân Client – Server. Data Transfer Object (DTO) có cách gọi khác là Value Object (VO).

Transfer Object dễ dàng và đơn giản là một POJO (Plain Old Java Object), chỉ cất các getter/ setter method với hoàn toàn có thể gồm implement serialize nhằm truyền download tài liệu trải qua network.

DTO hoàn toàn ko đựng behavior/ xúc tích, chỉ được áp dụng nhằm truyền tài liệu và bản đồ dữ liệu trường đoản cú các Domain Model trước khi truyền cho tới Client. Trong những vận dụng đơn giản dễ dàng, các Domain Model thường xuyên rất có thể được thực hiện lại trực tiếp dưới dạng DTO với được truyền trực tiếp đến lớp hiển thị, vì thế chỉ tất cả một Data Model thống duy nhất. Đối với các ứng dụng tinh vi hơn, chúng ta không muốn hiển thị cục bộ Domain Model mang đến Client, vì vậy, việc ánh xạ trường đoản cú những Domain Model sang trọng DTO là quan trọng.

Cài đặt Transfer Object Pattern như vậy nào?

*

UserModel.java

package com.hocbong2016.net.patterns.other.dto;import lombok.Data;/** * Domain Model / Entity */

Bạn đang xem: Hướng dẫn java design pattern

Datapublic class UserModel private Integer id;private String userName;private String fullName;private String password;private String email;private String bankAccount;Dao.java

package com.hocbong2016.net.patterns.other.dto;import java.util.List;import java.util.Optional;/** * Data Access Object */public interface Dao List getAll();Optional get(Integer id);void save(T t);void update(T t);void delete(T t);UserDao.java

package com.hocbong2016.net.patterns.other.dto;import java.util.ArrayList;import java.util.List;import java.util.Optional;public class UserDao implements Dao // Temporary databaseprivate List users = new ArrayList();public UserDao() UserModel user = new UserModel();user.setId(1);user.setUserName("hocbong2016.net");user.setEmail("hocbong2016.netvn
email.com");user.setFullName("GP Coder");user.setPassword("1234567");user.setBankAccount("9999-9999-9999");users.add(user);
Overridepublic List getAll() return users;
Overridepublic Optional get(Integer id) return users.stream().filter(u -> u.getId() == id).findFirst();

Xem thêm: Cản H Là Gì ? Có Cùng Nghĩa Với Cảnh Nóng? #1 Cảnh H Là Gì

Overridepublic void save(UserModel user) users.add(user);
Overridepublic void update(UserModel user) int index = -1;for (UserModel u : users) index++;if (user.getId().equals(u.getId())) users.set(index, user);break;
Overridepublic void delete(UserModel user) get(user.getId()).ifPresent(existUser -> users.remove(existUser));UserDTO.java

package com.hocbong2016.net.patterns.other.dto;import lombok.Data;/** * Data Transfer Object */
Datapublic class UserDTO private Integer id;private String userName;private String fullName;private String email;UserService.java

package com.hocbong2016.net.patterns.other.dto;/** * Business Object / Logic */public class UserService private UserDao dao = new UserDao();public UserDTO getUser(Integer id) UserModel mã sản phẩm = dao.get(id).get();return convertToDTO(model);public void saveUser(UserDTO dto) UserModel model = convertToModel(dto);dao.save(model);public void updateUser(UserDTO dto) UserModel Model = convertToModel(dto);dao.update(model);private UserModel convertToModel(UserDTO dto) UserModel mã sản phẩm = new UserModel();mã sản phẩm.setId(dlớn.getId());Mã Sản Phẩm.setFullName(dto lớn.getFullName());mã sản phẩm.setUserName(dto lớn.getUserName());mã sản phẩm.setEmail(dto lớn.getEmail());return model;private UserDTO convertToDTO(UserModel model) UserDTO dto = new UserDTO();dto.setId(mã sản phẩm.getId());dkhổng lồ.setFullName(Model.getFullName());dto.setUserName(Model.getUserName());dkhổng lồ.setEmail(Model.getEmail());return dto;DataAccessObjectPatternExample.java

package com.hocbong2016.net.patterns.other.dto;/** * Client - Data Access Object Pattern Example */public class DataAccessObjectPatternExample public static void main(String<> args) UserService service = new UserService();UserDTO dlớn = service.getUser(1);System.out.println("User: " + dto);dlớn.setFullName("hocbong2016.net");service.updateUser(dto);System.out.println("User Updated: " + dto);đầu ra của cmùi hương trình:

User: UserDTO(id=1, userName=hocbong2016.net, fullName=GP.. Coder, email=hocbong2016.netvn
gmail.com)User Updated: UserDTO(id=1, userName=hocbong2016.net, fullName=hocbong2016.net, email=hocbong2016.netvn
email.com)

Lợi ích của Transfer Object Pattern là gì?

Tách biệt xúc tích và ngắn gọn một cách ví dụ : Transfer Object chỉ cất data, còn lô ghích được implement vào phần khác.Cãi thiện năng suất ứng dụng : chi phí của từng request/ response là mập, bọn họ nên cố gắng gửi các duy nhất có thể. Để làm vấn đề này, chúng ta có thể chế tạo ra một Transfer Object để gửi data tự Client lên Server tốt tự Server mang lại Client một lượt duy nhất, thay vì nên gửi từng phần lẻ tẻ.Giảm kết nối thân những tầng trong ứng dụng: Client chỉ thao tác cùng với Transfer Object, cho nên nó không bị tác động Khi Domain Model chuyển đổi.Bao đóng các đối số : một phương thức có rất nhiều đối số, chúng ta cũng có thể bao đóng chúng vào một Transfer Object. Giúp bọn họ dễ ợt mở rộng, thêm/ bớt đối số.Nhận những dữ liệu trả về : vào Java, một phương thức chỉ hoàn toàn có thể trả về một giá trị, để rất có thể dìm được nhiều quý hiếm, chúng ta cũng có thể bao đóng góp bọn chúng trong một Transfer Object.Tăng bảo mật vận dụng : tùy từng người dùng khác biệt rất có thể xem được một trong những tài liệu một mực. Chúng ta có thể chế tạo những Transfer Object không giống nhau mang đến từng các loại người dùng cầm vì trả về một Domain Object một giải pháp thẳng. Trường vừa lòng cụ thể nhất là User Model, domain object này chứa báo cáo cả email, password, số thông tin tài khoản bank. Chúng ta hoàn toàn có thể sinh sản một Transfer Object dễ dàng chỉ cất biết tin chúng ta thương hiệu, ngày sinc. Không quan trọng bắt buộc trả tất cả dữ liệu Domain Model về Client. Tài liệu tmê mệt khảo: