DAO Design Pattern คืออะไร?

ใครที่เปิดผ่านมา หรือ ว่าค้นเจอจาก search engine แล้ว วันนี้จะมาแนะนำ DAO Design Pattern ว่ามันคืออะไรแล้วใช้ประโยชน์อย่างไร ? DAO ย่อมาจาก Data Access Object แปลตามตัวคือ การเข้าถึงข้อมูลวัตถุ ซึ่งจะช่วยเราในการ เขียน program เชิง oop ให้เข้ากับ relational database ได้ และ ที่สำคัญการสร้าง DAO Class ขั้นมาทำให้ Code ของเราดูจัดการง่ายขึ้นอีกด้วย มาดูตัวอย่างกันครับ

Student.java

 public class Student {  
     private int id;  
     private String firstName;  
     private String lastName;  
     
     public void setId(int id){  
         this.id = id;  
     }  
     public int getId(){  
         return id;  
     }  
     public void setFirstName(String firstName){  
         this.firstName = firstName;  
     }  
     public String getFirstName(){  
         return firstName;  
     }  
     public void setLastName(String lastName){  
         this.lastName = lastName;  
     }  
     public String getLastName(){  
         return lastName;  
     }  
 }  

StudentDAO.java

 public class StudentDAO {  
     protected static final String FINE_ALL = "select * from Student";  
     private Connection getConnection(){  
         Connection con = null;  
         try {  
            con = DriverManager.getConnection("jdbc:mysql://localhost/myproject1?user=root&password=1234");  
         } catch (SQLException e) {  
            e.printStackTrace();  
         }  
     return con;  
     }  
 
     public List findAllStudent() throws DAOException {  
         Connection connection = getConnection();  
         Statement stmt = null;  
         ResultSet rs = null;  
         ArrayList studentList = new ArrayList();  

         try {  
              stmt = connection.createStatement();  
              rs = stmt.executeQuery(FIND_ALL);  
              while (rs.next()) {  
                  // create the transfer object using data from rs  
                  Student student = new Student();  
                  student.setId(rs.getInt(1));  
                  student.setFirstName(rs.getString(2));  
                  student.setLastName(rs.getString(3));  
             
                  // add the TO to the list  
                  studentList.add(student);  
              }  
         } catch (Exception e) {  
             // handle exception  
         }  
         return studentList;  
      }  
 }  

FindAllStudent.java

 StudentDAO studentDao = new StudentDAO();  
 List studentList = studentDao.findAllStudent();  

* code นี้ไม่ใช้มาทั้งclass เหมือน2classบน ให้เอาไปใส่ไว้ใน metod ต่างของ Servlet หรือ Action

จากตัวอย่าง 3 ไฟล์ข้างบน เราสามารถเขียนเป็น 2 ไฟล์ คือนำไฟล์ StudentDAO มารวมกับไฟล์ FindAllStudent ได้แต่เราเราไม่ทำอย่างนั้นเพราะ การเขียนแบบนี้ สามารถนำ StudentDAO กับมา reuse ได้(ไม่ต้องเขียนซ้ำกันหลายที่) และสามารถ maintain ได้ง่าย(แก้ไฟล์เดียว) ถ้าไม่เข้าใจให้ลองนึกว่าเราต้องเขียน code class StudentDAO หลายๆครั้ง และเราจะแก้ต้องแก้กี่ไฟล์ คิดก็เหนื่อยแล้ว TOT  การเขียนแบบนี้ทำให้เราประหยัดเวลา และ โครงสร้างของ Code ก็ดูดีขึ้นอีกด้วย

~( ^ w ^)~  ชิวไหมหละ

About octoboy


Android Developer, Study Master degree of Computer Engineering at Prince of Songkla university.