เราใช้รูปแบบพื้นที่เก็บข้อมูลใช่มั้ย


14

เรากำลังใช้คลาสที่แยกจากกัน-repositoryเพื่อต่อท้ายเรียกข้อมูลจากฐานข้อมูล สำหรับแต่ละตารางที่เก็บของตนเอง

ตัวอย่างเช่นเรามีcustomerrepositoryคลาสที่มีวิธีการทุกอย่างเพื่อดึงลูกค้าและvacancyrepositoryที่มีวิธีการทุกชนิดเพื่อดึงตำแหน่งที่ว่าง

ฉันมีคำถามสองข้อเกี่ยวกับวิธีการทำสิ่งนี้:

  1. วิธีรับข้อมูลที่ครอบคลุมหลายตาราง ตัวอย่างเช่นฉันมีหน้าจอที่แสดงลูกค้าทั้งหมดที่ยังไม่ได้สร้างตำแหน่งว่าง ที่สามารถcustomerrepositoryใช้วิธีการจากvacancyrespositoryหรือทำทั้งสองอย่างที่เก็บกลับผลลัพธ์และจะมีระดับที่สูงขึ้นในลำดับชั้น (ชื่อให้ของมันdataservice) ที่ได้รับผลจากทั้งเก็บและรวมเป็น 1 ผล?

  2. พื้นที่เก็บข้อมูลสามารถจัดการตรรกะได้เท่าใด
    ฉันคิดว่ามันโอเคที่จะใช้ 'where active == true' ในที่เก็บเพื่อเรียกใช้เฉพาะเร็กคอร์ดที่ใช้งานอยู่หรือว่าควรจัดการตรรกะง่ายๆโดยคลาสที่สูงกว่าในลำดับชั้น (ลองตั้งชื่อ a dataservice)?

ตัวอย่างที่ฉันพบตอนนี้ก็คืออันนี้:

เรามีรายการคำถามซึ่งมีหนึ่งคำถามขึ้นไป
คำถามสามารถมีผลลัพธ์ซึ่งถืออยู่ในตารางแยกต่างหาก
ดังนั้นเมื่อคุณต้องการดึงผลลัพธ์รวมของรายการคำถามคุณต้องรวมข้อมูลจากquestionlistตารางตารางคำถามและquestionstatusตาราง

ตอนนี้เรามีที่เก็บข้อมูล 3 แห่งสำหรับตารางเหล่านี้

ถ้าฉันจะถามquestionlistrepositoryสิ่งที่เป็นผลรวมสำหรับรายการหมายเลข 12 มันจะต้องได้รับข้อมูลจากสองที่เก็บอื่น ๆ และด้วยเหตุนี้มีตรรกะบางอย่างในนั้นที่ได้รับอนุญาต?

หรือมีquestionlistdataserviceที่รู้ที่เก็บที่จะใช้?

อีกอย่างหนึ่ง: ที่เก็บข้อมูลของเราสามารถส่งผลIQueryableให้บริการโทรศัพท์สามารถรวมผลลัพธ์ได้อย่างง่ายดาย แต่ถ้าเป็นกรณีนี้ฉันไม่คิดว่ามันเป็นความคิดที่ดีที่จะดึงเนื้อหาทั้งหมดของตารางทั้งสามจาก ฐานข้อมูล


1
โดยทั่วไปในการเข้าถึงหลายตารางตารางเด่นจะถูกกำหนดโดยตารางของระเบียนที่ต้องมีอยู่ก่อนที่แบบสอบถามดึงข้อมูล ใน LEU OUTER JOIN นั่นจะเป็นตารางแรกที่กล่าวถึงและใน RIGHT OUTER JOIN มันจะเป็นตารางที่สอง
Neil

คำตอบ:


15

ที่เก็บส่งคืนวัตถุโดเมนและสร้างขึ้นบนชั้นของการทำแผนที่ สำหรับวัตถุโดเมนโดเมนที่ง่ายมากและตารางฐานข้อมูลสามารถเหมือนกันมาก

หากที่เก็บของคุณส่งคืนการแสดงโครงสร้างข้อมูลของคุณอย่างถูกต้องแสดงว่าอาจเป็นTable Data Gatewayหรือ Data Access Object (DAO)

ตัวอย่าง: ฐานข้อมูลของคุณมีตารางสำหรับบุคคลและที่อยู่ ในที่อยู่โดเมนแอปพลิเคชันของคุณไม่ใช่นิติบุคคลของมันเองมันเป็นเพียงทรัพย์สินของบุคคล ในกรณีนี้คุณจะไม่มี PersonRepository และ AddressRepository คุณมี PersonRepository โดเมนไม่ควรกังวลว่าจะคงข้อมูลโดเมนไว้อย่างไร Responsibilites เหล่านั้นอยู่ในเลเยอร์ที่อยู่เบื้องหลังที่เก็บ

จากตัวอย่างของคุณดูเหมือนว่าคุณมี DAO จริง ๆ และเพิ่งตั้งชื่อพวกเขาที่เก็บ


ดังนั้นเมื่อสร้างที่เก็บฉันสามารถมีดาต้าเกตเวย์ของตารางได้ลึกกว่าหนึ่งระดับและพื้นที่ของเราก็เป็นของ TDG
มิเชล

1
คุณทำได้ แต่ชั่งน้ำหนักค่าใช้จ่ายและผลประโยชน์ อย่ารังแกในการรักษา DAO และที่เก็บแยกจากกันโดยใช้หลักการของรหัส "เลเยอร์" ทำสิ่งที่อ่านได้มากที่สุดในกรณีนี้ การแยกและเลเยอร์ abstraction ที่เป็นผลลัพธ์อาจมีประโยชน์หากที่เก็บของคุณมักจะรวมข้อมูลจำนวนมากใน DAO อีกครั้ง
หมดเวลา Danila
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.