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 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
StudentS
cho Transfer Object tạo ra bởiserver
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ớiserver
- Một interface
StudentC
cho Transfer Object tạo ra bởiserver
chuyể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