คุณสามารถเห็นตัวอย่างที่ดีในSpring Data Frameworkซึ่งเป็นไปตามแนวคิดของที่เก็บ
ที่นั่นคุณจะเห็นที่เก็บข้อมูลจัดการกับที่เก็บข้อมูลเท่านั้นและไม่ค่อยมีตรรกะทางธุรกิจใด ๆ (ซึ่งสงวนไว้สำหรับชั้นบริการ) ตัวอย่างเช่นคุณลองดูการออกแบบของพวกเขาคุณจะเห็นว่าพวกเขามีส่วนต่อประสานCRUDRซึ่งเปิดเผยวิธีการในการสร้างทำลายและกู้คืนเอนทิตี (เหนือสิ่งอื่นใด) นอกจากนี้ยังมีPagingAndSortingRepositoryที่เพิ่มฟังก์ชันการทำงานพิเศษสำหรับการเรียงลำดับและผลลัพธ์การเพจเป็นต้น
ดังนั้นกรอบนี้อาจเป็นสถานที่ที่ดีในการศึกษาการออกแบบพื้นที่เก็บข้อมูลที่ดี
เท่าที่ฉันทราบแนวคิดหลายอย่างที่นำมาใช้โดย Spring Data Framework มาจากหนังสือยอดเยี่ยมที่เรียกว่าDomain-Driven Design: การแก้ปัญหาความซับซ้อนในหัวใจของซอฟต์แวร์หนังสือเล่มนี้มีเนื้อหาทั้งหมดเกี่ยวกับการออกแบบ Repository
คุณอาจพิจารณารับสำเนา
ข้อความที่ตัดตอนมาเล็กน้อยจากหนังสือเล่มนี้อธิบาย:
รูปแบบ REPOSITORY เป็นกรอบแนวคิดที่เรียบง่ายเพื่อห่อหุ้มโซลูชันเหล่านั้นและนำโฟกัสแบบจำลองของเรากลับมา
REPOSITORY หมายถึงวัตถุทั้งหมดของบางประเภทเป็นชุดแนวคิด (ปกติเลียนแบบ) มันทำหน้าที่เหมือนคอลเลกชันยกเว้นด้วยความสามารถในการสอบถามที่ซับซ้อนมากขึ้น วัตถุประเภทที่เหมาะสมจะถูกเพิ่มและนำออกและเครื่องจักรหลัง REPOSITORY จะแทรกหรือลบออกจากฐานข้อมูล คำจำกัดความนี้รวบรวมชุดของความรับผิดชอบที่เหนียวแน่นเพื่อให้สามารถเข้าถึงรากเหง้าของ AGGREGATES จากวงจรชีวิตในวัยเด็กจนถึงช่วงสุดท้าย
ไคลเอนต์ร้องขอวัตถุจาก REPOSITORY โดยใช้วิธีการสืบค้นที่เลือกวัตถุตามเกณฑ์ที่ระบุโดยไคลเอนต์โดยทั่วไปแล้วค่าของแอตทริบิวต์บางอย่าง REPOSITORY ดึงข้อมูลวัตถุที่ร้องขอห่อหุ้มเครื่องจักรของการสืบค้นฐานข้อมูลและการทำแผนที่ข้อมูลเมตา REPOSITORIES สามารถนำเคียวรีที่หลากหลายที่เลือกอ็อบเจ็กต์ตามเกณฑ์ที่ไคลเอ็นต์ต้องการ พวกเขายังสามารถส่งคืนข้อมูลสรุปเช่นการนับจำนวนอินสแตนซ์ที่ตรงกับเกณฑ์บางอย่าง พวกเขายังสามารถส่งคืนการคำนวณสรุปเช่นผลรวมของวัตถุที่ตรงกันทั้งหมดของคุณลักษณะตัวเลขบางอย่าง
Repository ช่วยยกภาระใหญ่หลวงจากไคลเอนต์ซึ่งตอนนี้สามารถพูดคุยกับส่วนต่อประสานที่เรียบง่ายเปิดเผยเจตนาและถามถึงสิ่งที่ต้องการในแง่ของรูปแบบ เพื่อรองรับทั้งหมดนี้ต้องมีโครงสร้างพื้นฐานทางเทคนิคที่ซับซ้อนมากมาย แต่ส่วนต่อประสานนั้นง่ายและเชื่อมโยงกับแนวคิดแบบโดเมน
ดังนั้น:
สำหรับวัตถุแต่ละประเภทที่ต้องการการเข้าถึงระดับโลกให้สร้างวัตถุที่สามารถให้ภาพลวงตาของการรวบรวมในหน่วยความจำของวัตถุทั้งหมดของประเภทนั้น ตั้งค่าการเข้าถึงผ่านอินเทอร์เฟซส่วนกลางที่รู้จักกันดี
จัดเตรียมวิธีการเพิ่มและลบวัตถุซึ่งจะแค็ปซูลการแทรกหรือการลบข้อมูลจริงในแหล่งข้อมูล จัดเตรียมวิธีการที่เลือกวัตถุตามเกณฑ์บางอย่างและส่งคืนวัตถุหรือคอลเลกชันที่สร้างอินสแตนซ์ทั้งหมดซึ่งมีค่าคุณสมบัติตรงตามเกณฑ์ดังนั้นจึงจัดเก็บข้อมูลจริงและเทคโนโลยีการสืบค้น ให้บริการรายงานซ้ำสำหรับ AGGREGATE root ที่ต้องการเข้าถึงโดยตรงจริง ๆ เท่านั้น ให้ความสำคัญกับรูปแบบของไคลเอ็นต์แทนการเก็บข้อมูลวัตถุทั้งหมดและการเข้าถึง RepOSITORIES