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 ^)~ ชิวไหมหละ