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
serversẽ tạo ra các Transfer Object và chuyển choclient. - 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
StudentScho Transfer Object tạo ra bởiserverchuyể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ớiserver - Một interface
StudentCcho Transfer Object tạo ra bởiserverchuyển cho `client. - Một class triển khai
StudentC.
Bước 1
Tạo 2 interface StudentS và StudentC.
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 StudentS và StudentC.
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
