รูปแบบพื้นที่เก็บข้อมูลกับการสร้างวัตถุ DAL


9

เท่าที่ผมได้เรียนรู้ที่ควรมีIRepository CRUDจากนั้นเราจะสืบทอดสิ่งนี้IRepositoryในอินเทอร์เฟซอื่นของเราที่ชอบIProductและใช้IProductคลาสที่เป็นรูปธรรมProductRepositoryด้วยวิธีการเช่นGetAllProducts(), Top5Products().

เราสามารถทำเช่นเดียวกันกับสถาปัตยกรรมระดับ n เช่นการสร้างDAL Class Libraryและในนั้นกำหนดชั้นเรียนProductด้วยวิธีการเช่น,GetAllProducts()Top5Products()

ทั้งในDAL.ProductและRepo.ProductRepositoryชั้นเรียนที่เราเริ่มต้นDB ContextของEntity Frameworkและสอบถามข้อมูลที่เกี่ยวข้องของเรา

การโทรคล้ายกันทั้งในRepo.ProductRepositoryหรือDAL.ProductจากวิธีการBLL

ในมุมมองของความคล้ายคลึงกันเหล่านี้คำถามของฉัน Repos มีประโยชน์อย่างไร? ฉันสามารถทำเช่นเดียวกันกับความสะดวกมากโดยใช้สถาปัตยกรรม n ชั้นด้วย ( Controller, BLL Class Library, DAL Class Library)


@ Neil ฉันคิดว่า OP คุ้นเคยกับ DAL และถามว่าที่เก็บข้อมูลเป็นเพียงส่วนต่อประสานอื่น ๆ สำหรับทำสิ่งเดียวกันหรือมากกว่านั้น
Christophe

@ Christophe แน่นอนฉันสับสนในเรื่องนี้ หากเราสามารถทำเช่นเดียวกันใน DAL ทำไมต้องใช้รูปแบบ repo
M. Arslan

คำตอบ:


7

ความเข้าใจของฉันคือ:

  • DAL (Data Access Layer) หมายถึงเลเยอร์ในซอฟต์แวร์ของคุณที่ตั้งอยู่ระหว่างเทคโนโลยีการคงอยู่ของคุณและแอปพลิเคชันตรรกะของคุณ โดยมีวัตถุประสงค์คือเพื่อให้ข้อกังวลการเข้าถึงข้อมูลแยกจากส่วนที่เหลือของความกังวลใบสมัครของคุณ มันเป็นแนวคิดทั่วไป

  • พื้นที่เก็บข้อมูลเป็นแนวคิดจาก DDD (การออกแบบโดเมนขับเคลื่อน)

ใน DDD เป็นพื้นที่เก็บข้อมูลเป็นผู้รับผิดชอบสำหรับห่อหุ้มความกังวลการเข้าถึงข้อมูลทั้งหมดที่ได้รับรวม สิ่งนี้มาพร้อมกับความรับผิดชอบในการรับรองความสอดคล้องระหว่างการอ่านและเขียนของการรวม และรวมเป็นกลุ่มของหน่วยงานที่เกี่ยวข้อง (เช่นProduct, Storeฯลฯ )

ดังนั้นพื้นที่เก็บข้อมูลเป็นเฉพาะตระหนักถึงการรวมของความคงทนและความสอดคล้องความกังวล DAL ทั่วไปของคุณมักจะประกอบด้วยที่เก็บเฉพาะ

TL; DR;

  • DALเป็นคำทั่วไปสำหรับการขจัดข้อกังวลเรื่องการเข้าถึงข้อมูล
  • พื้นที่เก็บข้อมูลเป็นแนวคิดที่คล้ายกัน แต่เฉพาะเจาะจงมากขึ้นจาก DDD
  • DAL ของคุณน่าจะประกอบด้วยที่เก็บหลายแห่ง

4
พื้นที่เก็บข้อมูลยังเป็นคำที่ใช้โดยทั่วไปนอก DDD เพื่ออ้างถึงคอลเลกชันในหน่วยความจำของวัตถุที่สะท้อนบันทึกฐานข้อมูล ในบริบทนี้ตั้งอยู่ระหว่าง DAL และ Business Logic Layer ดู martinfowler.com/eaaCatalog/repository.html
Robert Harvey

ทำไมทุกคนพยายามให้เครดิต DDD สำหรับทุกสิ่ง!
TheCatWhisperer

1
วันนี้ฉันเรียนรู้: P
MetaFight

2

คุณกำลังเปรียบเทียบแนวคิดที่แตกต่างและสมบูรณ์สองประการ:

  • ชั้นการเข้าถึงข้อมูลเป็นชั้นสถาปัตยกรรมที่มุ่งมั่นที่จะเข้าถึงข้อมูลที่เป็นนามธรรม ไม่ได้บอกว่าการเข้าถึงนั้นจะถูกทำให้เป็นนามธรรม
  • พื้นที่เก็บข้อมูลเป็นรูปแบบเฉพาะที่เป็น DAL (ดูรายการของรูปแบบในตอนท้ายของการเชื่อมโยงนี้ ) มันบอกวิธีการเข้าถึงข้อมูลโดยเฉพาะอย่างเป็นนามธรรม: โดยนำเสนอคอลเลกชันเช่นอินเทอร์เฟซไปยังแหล่งข้อมูล

DAL ในตัวอย่างของคุณ

น่าสนใจในตัวอย่างของไลบรารีคลาสDAL.Productดูเหมือนว่าจะเป็นที่เก็บ ดังนั้นจึงเป็นเรื่องปกติที่คุณจะไม่เห็นความแตกต่างจริง ๆ : จากมุมมองการนำไปปฏิบัติจะเหมือนกัน (ในกรณีนี้โดยเฉพาะ)
แต่มันไม่จำเป็นต้อง; DAL สามารถนำไปใช้งานต่างกันได้เช่น:

  • ระเบียนที่ใช้งานอยู่ซึ่งอาศัยเลเยอร์นามธรรมของเลเยอร์นามธรรม
  • วัตถุโดเมน anemic (ความสนใจรูปแบบต่อต้าน!) ที่ได้รับจากdata gateway แถว
  • หรือทำไมไม่วัตถุโดเมนที่ได้รับจากวัตถุแบบสอบถามที่แตกต่างกันซึ่งแต่ละแบบสอบถามจะใช้วิธีการเฉพาะเพื่อดึงวัตถุ
  • ที่เก็บ
  • การผสมผสานของทุกคน

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

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

ใน DDD ที่เก็บมีกฎมากกว่าที่จะเคารพ: พวกมันให้การเข้าถึงการรวม (เอนทิตี้อิสระหรือกลุ่มของเอนทิตีที่เกี่ยวข้องกับการรวมรูทรวม) และมีที่เก็บเดียวต่อการรวม

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