بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Transfer Object

الگوی Transfer Object زمانی که میخوایم داده ای را که دارای چندین خصیصه (attribute) است، در یک مرتبه از سرور به کلاینت پاس بدیم، به کار میره. Transfer Object با نامِ Value Object هم شناخته میشه. Transfer Object یک کلاس POJO ساده ست که دارای متدهای getter/setter است و قابلیت مرتب شدن به صورت متوالی را داره، بنابراین قابلیت انتقال از طریق شبکه را داره. این الگو هیچ رفتاری (behavior) نداره. معمولاً کلاس کاریِ (business) سمت سرور، داده ها را از پایگاه داده واکشی (fetch) می کنه و POJO را با آن داده ها پر می کنه و به کلاینت میفرسته یا داده ها را به روشِ pass by value (انتقال با آرگومان) پاس میده. شیءِ transfer (انتقال) برای کلاینت بصورت فقط خواندنیِه (read-only). کلاینت می تواند شیءِ transfer خودش را بسازه و برای به روز رسانی مقادیرِ داخل پایگاه داده در یک مرتبه، آن را به سرور پاس بده. موارد زیر، از موجودیت های این نوع الگوی طراحی اند:

  • Business Object – سرویسِ Business، شیءِ Transfer را با داده پر می کنه.
  • Transfer Object – POJO ساده، فقط متدهایی برای set/get کردن خصیصه ها (attributes) داره.
  • Client – Client، شیءِ Transfer را از شیءِ Business درخواست می کنه یا برای آن میفرسته.

پیاده سازی

در این بخش یک StudentBO بعنوان شیءِ Business و یک Student بعنوان شیءِ Transfer برای ارائه ی موجودیت هایمان، ایجاد می کنیم.

TransferObjectPatternDemo، نسخه ی آزمایشی کلاس مان بعنوان client عمل می کنه و از StudentBO و Student برای ارائه ی الگوی طراحیِ Transfer Object استفاده خواهد کرد.

transfer object pattern uml diagram

مرحله ی 1

ایجاد شیءِ Transfer.

StudentVO.java

public class StudentVO {
   private String name;
   private int rollNo;

   StudentVO(String name, int rollNo){
      this.name = name;
      this.rollNo = rollNo;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public int getRollNo() {
      return rollNo;
   }

   public void setRollNo(int rollNo) {
      this.rollNo = rollNo;
   }
}

مرحله ی 2

ایجاد شیءِ Business.

StudentBO.java

import java.util.ArrayList;
import java.util.List;

public class StudentBO {
	
   //list is working as a database
   List<StudentVO> students;

   public StudentBO(){
      students = new ArrayList<StudentVO>();
      StudentVO student1 = new StudentVO("Robert",0);
      StudentVO student2 = new StudentVO("John",1);
      students.add(student1);
      students.add(student2);		
   }
   public void deleteStudent(StudentVO student) {
      students.remove(student.getRollNo());
      System.out.println("Student: Roll No " + student.getRollNo() + ", deleted from database");
   }

   //retrive list of students from the database
   public List<StudentVO> getAllStudents() {
      return students;
   }

   public StudentVO getStudent(int rollNo) {
      return students.get(rollNo);
   }

   public void updateStudent(StudentVO student) {
      students.get(student.getRollNo()).setName(student.getName());
      System.out.println("Student: Roll No " + student.getRollNo() +", updated in the database");
   }
}

مرحله ی 3

استفاده از StudentBO برای ارائه ی الگوی طراحیِ Transfer Object.

TransferObjectPatternDemo.java

public class TransferObjectPatternDemo {
   public static void main(String[] args) {
      StudentBO studentBusinessObject = new StudentBO();

      //print all students
      for (StudentVO student : studentBusinessObject.getAllStudents()) {
         System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
      }

      //update student
      StudentVO student = studentBusinessObject.getAllStudents().get(0);
      student.setName("Michael");
      studentBusinessObject.updateStudent(student);

      //get the student
      student = studentBusinessObject.getStudent(0);
      System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
   }
}

مرحله ی 4

بررسی خروجی

Student: [RollNo : 0, Name : Robert ]
Student: [RollNo : 1, Name : John ]
Student: Roll No 0, updated in the database
Student: [RollNo : 0, Name : Michael ]
در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد