รูปแบบ DAO และ Repository เป็นวิธีการใช้ Data Access Layer (DAL) ดังนั้นเริ่มต้นด้วย DAL ก่อน
แอปพลิเคชันเชิงวัตถุที่เข้าถึงฐานข้อมูลต้องมีตรรกะบางอย่างเพื่อจัดการการเข้าถึงฐานข้อมูล เพื่อที่จะรักษาความสะอาดของรหัสและโมดูลาร์ขอแนะนำให้แยกตรรกะการเข้าถึงฐานข้อมูลออกเป็นโมดูลแยกต่างหาก ในสถาปัตยกรรมแบบเลเยอร์โมดูลนี้คือ DAL
จนถึงตอนนี้เรายังไม่ได้พูดคุยเกี่ยวกับการใช้งานเฉพาะ: เพียงหลักการทั่วไปที่วางตรรกะการเข้าถึงฐานข้อมูลในโมดูลแยกต่างหาก
ตอนนี้เราจะใช้หลักการนี้ได้อย่างไร โดยเฉพาะอย่างยิ่งกับกรอบงานเช่นไฮเบอร์เนตคือรูปแบบ DAO
รูปแบบ DAO เป็นวิธีหนึ่งในการสร้าง DAL โดยทั่วไปนิติบุคคลแต่ละโดเมนจะมี DAO ของตนเอง ยกตัวอย่างเช่นUser
และUserDao
, Appointment
และAppointmentDao
ฯลฯ ตัวอย่างของ DAO กับ Hibernate: http://gochev.blogspot.ca/2009/08/hibernate-generic-dao.html
จากนั้นรูปแบบ Repository คืออะไร? เช่นเดียวกับ DAO รูปแบบของที่เก็บก็เป็นวิธีที่ทำให้ DAL ประสบความสำเร็จเช่นกัน จุดหลักในรูปแบบ Repository คือจากมุมมองของลูกค้า / ผู้ใช้นั้นควรมีลักษณะหรือมีพฤติกรรมเป็นคอลเลกชัน Collection collection = new SomeCollection()
อะไรคือความหมายโดยทำตัวเหมือนคอลเลกชันไม่ได้ว่ามันจะต้องมีการยกตัวอย่างเช่น แต่ก็หมายความว่าควรสนับสนุนการดำเนินการเช่นเพิ่มลบออกมี ฯลฯ นี่คือสาระสำคัญของรูปแบบ Repository
ในทางปฏิบัติเช่นในกรณีของการใช้ Hibernate รูปแบบที่เก็บจะรับรู้ด้วย DAO นั่นคืออินสแตนซ์ของ DAL ที่สามารถเป็นได้ทั้งอินสแตนซ์ของรูปแบบ DAO และรูปแบบ Repository
รูปแบบพื้นที่เก็บข้อมูลไม่จำเป็นต้องเป็นสิ่งที่หนึ่งสร้างบน DAO (ตามที่บางคนอาจแนะนำ) หาก DAO ได้รับการออกแบบด้วยอินเทอร์เฟซที่สนับสนุนการดำเนินการที่กล่าวถึงข้างต้นแสดงว่าเป็นอินสแตนซ์ของรูปแบบ Repository ลองคิดดูถ้า DAO มีชุดของการดำเนินการเหมือนคอลเลกชันอยู่แล้วอะไรคือสิ่งที่จำเป็นสำหรับเลเยอร์พิเศษด้านบนของมัน
IRepository
อินเตอร์เฟสของคุณอย่างแท้จริง คุณต้องการให้ที่เก็บของคุณใช้ DAO ในการนำไปใช้ โปรดจำไว้ว่า DAO จะเป็นวัตถุต่อตารางในขณะที่พื้นที่เก็บข้อมูลมักจะต้องใช้หลาย DAO เพื่อสร้างเอนทิตีเดียว หากคุณพบว่าไม่ใช่ในกรณีของที่เก็บและเอนทิตีของคุณเพียงแค่ต้องเข้าถึงตารางเดียวนั่นหมายความว่าคุณมีแนวโน้มที่จะสร้างโดเมนแอนติโนมิก