ใครช่วยอธิบายแบบแผนพื้นที่เก็บข้อมูลใน NET ให้ฉันทีละขั้นตอนเป็นตัวอย่างหรือตัวอย่างที่ง่ายมาก
ฉันรู้ว่านี่เป็นคำถามที่พบบ่อยมาก แต่จนถึงตอนนี้ฉันยังไม่พบคำตอบที่น่าพอใจ
ใครช่วยอธิบายแบบแผนพื้นที่เก็บข้อมูลใน NET ให้ฉันทีละขั้นตอนเป็นตัวอย่างหรือตัวอย่างที่ง่ายมาก
ฉันรู้ว่านี่เป็นคำถามที่พบบ่อยมาก แต่จนถึงตอนนี้ฉันยังไม่พบคำตอบที่น่าพอใจ
คำตอบ:
โดยสรุปฉันจะอธิบายถึงผลกระทบที่กว้างขึ้นของรูปแบบที่เก็บ มันช่วยให้โค้ดทั้งหมดของคุณใช้วัตถุโดยไม่ต้องรู้ว่าวัตถุยังคงอยู่อย่างไร ความรู้ทั้งหมดเกี่ยวกับการคงอยู่รวมถึงการแมปจากตารางไปยังวัตถุมีอยู่ในที่เก็บอย่างปลอดภัย
บ่อยครั้งที่คุณจะพบแบบสอบถาม SQL ที่กระจัดกระจายอยู่ใน codebase และเมื่อคุณมาเพิ่มคอลัมน์ในตารางคุณต้องค้นหาไฟล์รหัสเพื่อลองและค้นหาประเพณีของตาราง ผลกระทบของการเปลี่ยนแปลงนั้นกว้างขวาง
ด้วยรูปแบบที่เก็บคุณจะต้องเปลี่ยนหนึ่งวัตถุและที่เก็บหนึ่ง ผลกระทบมีขนาดเล็กมาก
บางทีมันอาจช่วยให้คิดได้ว่าทำไมคุณถึงใช้รูปแบบพื้นที่เก็บข้อมูล นี่คือสาเหตุบางประการ:
คุณมีที่เดียวสำหรับการเปลี่ยนแปลงการเข้าถึงข้อมูลของคุณ
คุณมีที่เดียวที่รับผิดชอบตารางชุดหนึ่ง (โดยปกติ)
มันง่ายที่จะแทนที่ที่เก็บด้วยการใช้งานปลอมสำหรับการทดสอบ - ดังนั้นคุณไม่จำเป็นต้องมีฐานข้อมูลสำหรับการทดสอบหน่วยของคุณ
มีประโยชน์อื่น ๆ เช่นถ้าคุณใช้ MySQL และต้องการเปลี่ยนไปใช้ SQL Server - แต่ฉันไม่เคยเห็นสิ่งนี้ในทางปฏิบัติ!
IConnection
, ICommand
ส่วน ฯลฯ ที่หนังประเภทของฐานข้อมูล พื้นที่เก็บข้อมูลมักจะเป็นศูนย์กลางของโดเมนมากกว่า
นี่เป็นตัวอย่างที่ดี: ตัวอย่างรูปแบบพื้นที่เก็บข้อมูลใน C #
โดยทั่วไปพื้นที่เก็บข้อมูลจะซ่อนรายละเอียดว่าข้อมูลถูกดึง / คงอยู่อย่างแน่นอนจาก / ไปยังฐานข้อมูล ภายใต้ผ้าห่ม:
IDbContext
) หรือ nhibernate ( ISession
) โดยตรง พื้นที่เก็บข้อมูลที่นำมาใช้อย่างถูกต้องเป็นนามธรรมเก็บข้อมูลที่มีอยู่เฉพาะทั้งหมด (เช่นวิธีการที่ผู้ให้บริการ Linq To Sql ปัจจุบันทำงาน) IQueryable
เช่นไม่เคยเปิดเผย
IQueryable
ไม่ได้มีข้อมูลเฉพาะการคงอยู่ การสำรองข้อมูลของ IQueryable อาจเป็นเรื่องง่ายเหมือนอาเรย์ฮาร์ดโค้ดหรืออาจมาจากไฟล์ XML, บริการบนเว็บ, ฐานข้อมูล, ไฟล์แบบแบน ฯลฯ ฉันไม่แนะนำที่เก็บที่ไม่เปิดเผย IQueryable เช่นเคย นำไปสู่การเข้าถึงข้อมูลที่ช้าในทุกกรณีที่การเปิดเผย IQueryable จะช่วยให้อินสแตนซ์บางอย่างทำการปรับปรุงประสิทธิภาพซึ่งสามารถใช้งานได้หากที่เก็บข้อมูลมีความสามารถนั้น นอกจากนี้การซ่อน DbContext ช่วยให้คุณสามารถเปลี่ยนไปใช้ ORM อื่นหากต้องการ (หรือไม่มี ORM!)
IN
คำสั่ง sql โดยไม่ทราบว่าผู้ให้บริการ LinqToSql เฉพาะทำอย่างไร