คุณพูดถูกจริงๆ DbContext
เป็นการใช้งานของหน่วยของรูปแบบการทำงานและIDbSet
เป็นการใช้รูปแบบที่เก็บ
ที่เก็บปัจจุบันได้รับความนิยมและใช้มากเกินไป ทุกคนใช้เพียงเพราะมีบทความมากมายเกี่ยวกับการสร้างพื้นที่เก็บข้อมูลสำหรับกรอบงานเอนทิตี แต่ไม่มีใครอธิบายถึงความท้าทายที่เกี่ยวข้องกับการตัดสินใจนี้
เหตุผลหลักสำหรับการใช้พื้นที่เก็บข้อมูลมักจะ:
- ซ่อน EF จากชั้นบน
- ทำให้โค้ดทดสอบได้ดีขึ้น
เหตุผลแรกคือความบริสุทธิ์ทางสถาปัตยกรรมบางอย่างและความคิดที่ดีว่าถ้าคุณทำให้ชั้นบนของคุณเป็นอิสระใน EF คุณสามารถสลับไปใช้เฟรมเวิร์กการคงอยู่อื่นได้ในภายหลัง คุณเห็นสิ่งนั้นในโลกแห่งความเป็นจริงกี่ครั้งแล้ว? เหตุผลนี้ทำให้การทำงานกับ EF ยากขึ้นเพราะพื้นที่เก็บข้อมูลของคุณต้องเปิดเผยคุณสมบัติเพิ่มเติมมากมายที่ห่อสิ่งที่ EF อนุญาตให้เป็นค่าเริ่มต้น
ในเวลาเดียวกันการห่อรหัส EF สามารถทำให้การจัดระเบียบของคุณดีขึ้นและปฏิบัติตามกฎการแยกข้อกังวล สำหรับฉันนี่เป็นข้อได้เปรียบที่แท้จริงเพียงอย่างเดียวของที่เก็บและหน่วยงาน แต่คุณต้องเข้าใจว่าการทำตามกฎนี้กับ EF อาจจะทำให้โค้ดของคุณบำรุงรักษาได้ดีขึ้นและอ่านง่ายขึ้น แต่ในความพยายามเริ่มแรก สำหรับแอปพลิเคชันขนาดเล็กสิ่งนี้อาจมีความซับซ้อนที่ไม่จำเป็น
เหตุผลที่สองถูกต้องบางส่วน ข้อเสียที่สำคัญของ EF คือสถาปัตยกรรมที่เข้มงวดซึ่งสามารถเยาะเย้ยได้ยากดังนั้นหากคุณต้องการทดสอบหน่วยชั้นบนคุณจะต้องห่อหุ้ม EF เพื่อให้สามารถใช้งานได้จริง แต่ตอนนี้มีผลกระทบอื่น ๆ อีกมากมายซึ่งผมอธิบายไว้ที่นี่
ฉันทำตามบล็อกของ Ayende หากคุณเคยใช้ NHibernate คุณอาจรู้จักบทความของเขา ผู้ชายคนนี้เพิ่งเขียนบทความหลายฉบับเพื่อต่อต้านการใช้ที่เก็บกับ NHibernate แต่ NHibernate นั้นเยาะเย้ยได้ดีกว่ามาก