[Design Patterns] Transfer Object

Transfer Object (đối tượng chuyển nhượng) được sử dụng khi chúng ta muốn truyền dữ liệu với nhiều thuộc tính từ client tới server. Transfer Object còn được biết đến với một cái tên khác là Value Object (đối tượng lưu trữ các giá trị). Transfer Object là một class POJO đơn giản với các

Transfer Object (đối tượng chuyển nhượng) được sử dụng khi chúng ta muốn truyền dữ liệu với nhiều thuộc tính từ client tới server. Transfer Object còn được biết đến với một cái tên khác là Value Object (đối tượng lưu trữ các giá trị). Transfer Object là một class POJO đơn giản với các phương thức getter/setter và có thể được chuẩn hóa để truyền qua mạng kết nối. Các object này không có chứa bất kỳ phương thức nào khác. Các class xử lý logic ở server thường truy vấn dữ liệu từ database và tạo ra các POJO để chuyển tới client. Đối với client thì các Transfer Object là các object read-only không thể được ghi đè dữ liệu đang chứa. Code client có thể tự tạo ra các Transfer Object và truyền tới server để cập nhật dữ liệu trong database. Sau đây là các thành phần của pattern:

  • Transfer Object – POJO đơn giản với các phương thức getter/setter.
  • Business Object – đối tượng xử lý logic của server sẽ tạo ra các Transfer Object và chuyển cho client.
  • Client – object gửi yêu cầu và chuyển các Transfer Object tới Business Object.

Áp dụng triển khai

server

  • Chúng ta sẽ tạo một class BusinessObject để đóng vai trò mô phỏng xử lý yêu cầu ở server.
  • Một interface StudentS cho Transfer Object tạo ra bởi server chuyển cho `client.
  • Một class triển khai StudentS.

client

  • Một class Client đóng vai trò mô phỏng tương tác người dùng gửi yêu cầu tới server
  • Một interface StudentC cho Transfer Object tạo ra bởi server chuyển cho `client.
  • Một class triển khai StudentC.

Bước 1

Tạo 2 interface StudentSStudentC.

server/StudentS.java

packageserver;publicinterfaceStudentS{intgetRoll();StringgetName();}

client/StudentC.java

packageclient;publicinterfaceStudentC{intgetRoll();StringgetName();}

Bước 2

Tạo 2 class Transfer Object triển khai StudentSStudentC.

server/Student.java

packageserver;classStudentimplementsStudentS{privateint roll;privateString name;Student(int roll,String name
   ){this.roll = roll;this.name = name;}@OverridepublicintgetRoll(){return roll;}@OverridepublicStringgetName(){return name;}}// class

client/Student.java

packageclient;classStudentimplementsStudentC{privateint roll;privateString name;publicStudent(int roll,String name
   ){this.roll = roll;this.name = name;}@OverridepublicintgetRoll(){return roll;}@OverridepublicStringgetName(){return name;}}// class

Bước 3

Tạo class BusinessObject.

server/BusinessObject.java

packageserver;importclient.StudentC;importjava.util.ArrayList;importjava.util.List;publicclassBusinessObject{privateList<StudentS> database;publicBusinessObject(){connectDatabase();}publicstaticStudentScloneStudent(StudentS stds){returnnewStudent(stds.getRoll(), stds.getName());}privatevoidconnectDatabase(){
      database =newArrayList<StudentS>();StudentS john =newStudent(0,"John");
      database.add(john);StudentS micheal =newStudent(1,"Micheal");
      database.add(micheal);}publicList<StudentS>getAllStudents(){return database
         .stream().map((stds)->BusinessObject.cloneStudent(stds)).toList();}publicStudentSgetStudent(int roll){return database.get(roll);}publicvoidupdateStudent(StudentC stdc){StudentS updated =newStudent(stdc.getRoll(), stdc.getName());
      database.remove(stdc.getRoll());
      database.add(updated);System.out.println("Student [ Roll : "+ updated.getRoll()+" ] "+"updated in database");}}// class

Bước 4

Tạo class Client mô tả các yêu cầu.

client/Client.java

packageclient;importserver.BusinessObject;importserver.StudentS;importjava.util.List;publicclassClient{privateBusinessObject service;publicvoidsetService(BusinessObject business){this.service = business;}publicvoidmockupRequest(){requestAndPrintAllStudents();requestAndUpdateFirstStudent();requestAndPrintAllStudents();}privatevoidrequestAndPrintAllStudents(){System.out.println("=== Request & Print All Students");List<StudentS> studentList = service.getAllStudents();
      studentList.forEach((std)->printStudentInfo(std.getRoll(), std.getName()));}privatevoidrequestAndUpdateFirstStudent(){System.out.println("=== Request & Update First Student");StudentS firstStd = service.getStudent(0);StudentC updated =newStudent(firstStd.getRoll(),"Kei");
      service.updateStudent(updated);}privatevoidprintStudentInfo(int roll,String name){System.out.println("Student [ Roll : "+ roll +", Name : "+ name +" ]");}}

Bước 5

Chạy thử hoạt động của pattern.

PatternDemo.java

importclient.Client;importserver.BusinessObject;publicclassPatternDemo{publicstaticvoidmain(String[] args){BusinessObject business =newBusinessObject();Client client =newClient();
      client.setService(business);
      client.mockupRequest();}}// class

Bước 6

Kiểm chứng lại kết quả được in ra tại console.

console

===Request&PrintAllStudentsStudent[Roll:0,Name:John]Student[Roll:1,Name:Micheal]===Request&UpdateFirstStudentStudent[Roll:0] updated in database
===Request&PrintAllStudentsStudent[Roll:1,Name:Micheal]Student[Roll:0,Name:Kei]

Nguồn: viblo.asia

Bài viết liên quan

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 2

viết lại nội dung này ” Phát hiện các cuộc tấn công Cross Site Scripting (XSS)

AI Chatbot 2025: Xu Hướng Tất Yếu Cho Doanh Nghiệp Dẫn Đầu

Giới thiệu AI chatbots đã trải qua một hành trình đáng kể, từ những công cụ t

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 1

Tấn công web là gì? Ứng dụng web là các ứng dụng cung cấp dịch vụ cho người

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp Trong kỷ nguyên s