Basic JavaWeb ตอนที่ 6 Create DAO

DAO (Data Access Object) คือ Object ที่มีหน้าที่ในการเข้าถึง (Access) ข้อมูล เพราะฉะนั้นภายในคลาสนี้จะประกอบไปด้วยเมธอดที่ใช้ในการเข้าถึงข้อมูลเท่านั้น หากลองนึกย้อนกลับไปเราทำการสร้างคลาส ต่าง ๆ ขึ้นมาล้วนแล้วแต่กำหนดให้มันมีหน้าที่หลักเพียงอย่างเดียวเท่านั้น เช่น…

DatabaseInfo.java : เราให้มันทำหน้าที่กำหนดค่าตัวแปรที่ต้องใช้ในการเชื่อมต่อฐานข้อมูล MySQL

Database.java : เรากำหนดให้คลาสนี้ทำหน้าที่เกี่ยวกับเชื่อมต่อฐานข้อมูลและปิดการเชื่อมต่อ

Book.java : อยู่ใน Package Model ทำหน้าที่เป็นตัวแทนของข้อมูลแต่ละแถวในตาราง Book ภายในคลาสนี้ก็มีแต่เมธอดที่เกี่ยวข้องกับการกำหนดค่า(Set) และคืนค่า(Get) มาให้เมื่อเราต้องการนำค่านั้นไปใช้งาน

สังเกตดี ๆ นะคะ เราพูดในสองมุมคือ การอ้างถึงด้วยคำว่า “คลาส” (class) และคำว่า “ออบเจ็กต์” (Object) เวลาเราพูดถึง “คลาส” เราจะมองมันในมุมของโครงสร้างต่าง ๆ ที่เรากำหนดหรือกำลังลงมือเขียนมันขึ้นมาและบันทึกมันเอาไว้ในฮาร์ดดิสก์ ( Hard disk) เช่น มีคลาสนี้มีตัวแปรอะไรบ้าง ? ทำงานอะไรได้บ้าง ? (หรือความหมายเดียวกันคือมีเมธอดอะไรบ้าง) ในขณะที่เราอ้างถึงมันด้วยคำว่า “ออบเจ็กต์” เราจะมองในมุมของการทำงานแล้วไม่ใช่ตอนที่กำลังเขียนอยู่ คงไม่มีใครหรือหนังสือเล่มไหนบอกว่ากำลังเขียน Object นะคะ คือเราทำการสร้าง Object ด้วยคำสั่ง new ขึ้นมา จากตอนแรกที่มันเป็นคลาสอยู่ มันก็จะแปลงร่างกลายเป็น Object โดยในแง่ของทางฮาร์ดแวร์นั้นมันจะถูกโหลดขึ้นมาอยู่ในหน่วยความจำ(Memory) เพื่อรอให้เราเรียกใช้งาน ถึงตอนนี้เราสามารถกำหนดค่า ขอให้มันแสดงค่า หรือเอาค่ามาคำนวณ หรือจะทำอะไรก็แล้วแต่เราทำได้หมดเลย ตามรูปแบบที่เราได้ออกแบบและเขียนเอาไว้ในคลาส พอจะเห็นความแตกต่างของสองคำนี้หรือยังคะ ? เราคิดว่าหนังสือหลาย ๆ เล่มที่อธิบายคำว่า Class / Object เหมือนกับสุนัขเหมือนกับแมวอะไรทำนองนั้นมันเข้าใจยากนะ (หรือบางทีเราอาจจะโง่เองก็ได้ ) เค้าคงอยากจะบอกว่า Class ก็คือสุนัข การที่มันเห่าได้ วิ่งได้ นั่นคือ Object สำหรับคนที่ศึกษาเรื่อง OOP ด้วยตัวเอง หรือโปรแกรมเมอร์บางคนที่เขียนโปรแกรมแบบ OOP อยู่ยังไม่เข้าใจเรื่องนี้เลย

กลับเข้าเรื่อง DAO ของเราต่อดีกว่า ในการสร้าง DAO เราจะสร้าง Interface ขึ้นมาก่อน แล้วจะ implement ไปใช้ทีหลัง สำหรับประโยชน์ของ interface ในเบื้องต้นนั้นขอให้เรารู้เอาไว้เป็นพื้นฐานก่อนว่า มันช่วยให้เรามีความคิด มีการวางแผนก่อนที่จะลงมือเขียนโค้ด รู้ว่าจะทำอะไรบ้าง บางคนเปรียบ Interface เหมือนกับสารบัญของหนังสือ ก็ไม่ใช่เรื่องแปลกนะคะ (แม้ว่าความจริงมันจะมีประโยชน์มากกว่านั้น) เวลาเราไปอ่านโค้ดของคนอื่นแค่ดู Interface ก็รู้แล้วว่ามันจะสามารถทำอะไรได้บ้าง มันง่ายกว่าการไปไล่โค้ดตรง ๆ ซึ่งเปรียบเหมือนกับการไปอ่านหนังสือทั้งเล่ม (ทั้งนี้ทั้งนั้นการตั้งชื่อเมธอดก็ต้องสื่อความหมายด้วย)

สร้าง Package ขึ้นมาตั้งชื่อว่า basic.javaweb.dao สร้าง Java Interface… ตั้งชื่อว่า BookDao.java (หากไม่เห็นเมนูนี้ให้เลือก ไปที่ Other… ด้านล่างสุด พิมพ์คำว่า Interface ในช่อง Filter และเลือก Java Interface… ในส่วนของ File Types) จากนั้นพิมพ์โค้ดต่าง ๆ ลงไปตามภาพที่ 1

basic_javaweb_6_01

ภาพที่ 1 โค้ดในไฟล์ BookDao.java

 

สงสัยไหมคะว่าทำไมถึงออกแบบ Interface แบบนี้ ? ถ้าพูดเป็นภาษาคนก็คือ…

basic_javaweb_6_02

ภาพที่ 2 อธิบาย BookDao.java

 

การพัฒนาโปรแกรมเราก็พัฒนาขึ้นมาตามความต้องการไม่มีที่สุดสุดของมนุษย์นี่แหละค่ะ เวลาเราทำงานกับคนเราก็ใช้ภาษาคนพูด ถ้าเราไปสั่งคอมพิวเตอร์เราก็ต้องแปลงภาษาพูดเหล่านั้นเป็นโค้ดในภาษาคอมพิวเตอร์ ต่าง ๆ ที่เราใช้อยู่ แล้วคอมพิวเตอร์ก็จะทำการแปลงโค้ดเหล่านั้นให้อยู่ในรูปที่คอมพิวเตอร์รู้เรื่องและเข้าใจความหมาย แล้วก็ทำงานตามคำสั่งที่ได้รับ เพราะฉะนั้นอย่าลืมเอาสิ่งเหล่านี้ไปประยุกต์ใช้ และออกแบบมันให้เหมาะสมตามความต้องการนะคะ ^^

ตอนนี้เรามี Interface แล้ว มันเป็นเพียงแค่รายชื่อเมธอดที่ไม่มีคำสั่งในการทำงานเลย เราไม่สามารถสร้าง Object ที่เป็น Interface ได้ ในการใช้งาน Interface เราจะต้องสร้าง Java Class… ที่ทำการ implements Interface นี้ไปแล้วทำการเขียนขั้นตอนการทำงานต่าง ๆ ใน Java Class… นั้น ดังภาพที่ 3 เราสร้าง Java Class.. ตั้งชื่อว่า BookDaoImpl.java ขึ้นมาภายใต้ Package เดียวกัน

basic_javaweb_6_03

ภาพที่ 3 โค้ดของ BookDaoImpl.java (1)

 

basic_javaweb_6_04

ภาพที่ 4 โค้ดของ BookDaoImpl.java (2)

 

ตอนนี้รายชื่อเมธอดทั้งหมดที่เราเขียนเอาไว้ที่ BookDao.java ก็ได้มาอยู่ในคลาส BookDaoImpl.java แล้วนะคะ ภายในคลาสยังไม่มีคำสั่งเช่นเดิม เป็นหน้าที่ของเราที่จะต้องเขียนคำสั่งต่าง ๆ ให้มันสามารถทำงานได้ตามรูปแบบที่เราได้ออกแบบเอาไว้ คราวนี้เราจะทำการเชื่อมต่อกับฐานข้อมูลจริง ๆ แล้วเราจะนำ คลาส Database.java เข้ามาใช้งานในคลาส BookDaoImpl.java ได้อย่างไร ? คำตอบคือมีหลายวิธีด้วยกันค่ะ เราจะเลือกวิธีการสืบทอดคุณสมบัติ (Inheritance) ของคลาส Database.java มาเพื่อนำตัวแปร mysql เข้ามาใช้โดยมีรูปแบบดังภาพที่ 5 อย่าลืม (import Package basic.javaweb.database.Database เข้ามาด้วยนะคะ)

basic_javaweb_6_05

ภาพที่ 5 การสืบทอดคุณสมบัติ (Inheritance) Database.java

 

ตอนนี้คลาส BookDaoImpl.java ของเราก็พร้อมสำหรับการเชื่อมต่อไปยังฐานข้อมูลแล้ว ในบทความต่อไปเรามาดูกันค่ะว่า เมธอด getAll() จะมีหน้าตาแบบไหนและประกอบไปด้วยส่วนใดบ้าง แล้วพบกันค่ะ


>>> เรียนรู้ MVC ด้วย โปรเจ็กต์ Basic JavaWeb

ภาคที่ 1 ภาพรวมของระบบ (Overview)

Basic JavaWeb ตอนที่ 1 Introduction
Basic JavaWeb ตอนที่ 2 Overview
Basic JavaWeb ตอนที่ 3 Structure

ภาคที่ 2 Model (ส่วนติดต่อกับข้อมูล)
Basic JavaWeb ตอนที่ 4 Connection Datebase
Basic JavaWeb ตอนที่ 5 Create Model
Basic JavaWeb ตอนที่ 6 Create DAO
Basic JavaWeb ตอนที่ 7 Method getAll()
Basic JavaWeb ตอนที่ 8 Method isInsert()
Basic JavaWeb ตอนที่ 9 Method isUpdate()
Basic JavaWeb ตอนที่ 10 Method isDelete()
Basic JavaWeb ตอนที่ 11 Method getById()
Basic JavaWeb ตอนที่ 12 Method getByKeyword()

ภาคที่ 3 Controller และView (ส่วนของการควบคุมการทำงานและการแสดงผล)

ออกแบบ Template
– HTML
– CSS
– JavaScript
– JSP (EL, JSTL)

เชื่อมต่อ Controller และ View

เชื่อมต่อ Model -> Controller -> View

สรุป


ธมนวรรณ มณีจันทร์

ธมนวรรณ มณีจันทร์

|:- เราเชื่อมั่นว่าการเสียสละและการแบ่งปันจะทำให้โลกใบนี้สวยงามมากขึ้น ทุกๆ จุดเริ่มต้นของการเรียนรู้ นำไปสู่การเรียนรู้ถัดไป เว็บไซต์แห่งนี้ขอเป็นส่วนหนึ่งของการแบ่งปันความรู้ที่ไม่มีที่สิ้นสุด มาร่วมกันผลักดันโลกของเราให้หมุนไปพร้อมกับพลังแห่งความรักด้วยกันนะคะ :) >>> |:- About Me! -:|