ทำไมรูปแบบพื้นที่เก็บข้อมูลจำเป็นใน NHibernate?


13

ฉันอ่านอย่างเป็นทางการของแอพลิเคชัน NHibernate ตามแรกของคุณ

ในขณะที่การสอนนั้นดีและง่ายต่อการติดตามฉันสงสัยว่าทำไมรูปแบบ Repository จึงถูกใช้

ในต่างๆAdd, Update, RemoveวิธีการในProductRepositoryการดำเนินงานรหัสเกือบจะเหมือนกับ - พวกเขาทั้งหมดใช้การทำธุรกรรมและความแตกต่างที่อยู่ใน "เนื้อ" คือโทรsession.Saveint Addวิธีการsession.Deleteในremoveวิธีการ ( หน้าขาดเบรก HTML, แต่คุณสามารถค้นหาหน้าสำหรับรหัสที่เกี่ยวข้องเช่นpublic void Remove,public void Add )

รหัสนั้น "รู้สึกผิด"

เหตุใดผู้เขียนจึงใช้รูปแบบ Repository - เป็นเพียงการสาธิตการใช้ NHibernate หรือว่าจำเป็นหรือเหตุผลอื่น ๆ

ps พื้นหลังของฉันมาจาก Ruby on Rails โดยใช้ ActiveRecord ดังนั้นฉันจึงพยายามเข้าใจว่า NHibernate ทำงานอย่างไร / ใช้งานอย่างไร


1
หากคุณชอบรูปแบบ ACtive Record คุณสามารถใช้ Castle Active Record เพื่อนั่งบน NHibernate castleproject.org/activerecord
Ben Robinson

3
นี่เป็นคำถามที่สำคัญ มีบางคนโต้แย้งว่าจะใช้หรือไม่ Ayende เขียนข้อโต้แย้งของเขาที่จะไม่ใช้ในRepository เป็นซิงเกิลใหม่

คำตอบ:


10

ไม่จำเป็นต้องใช้รูปแบบที่เก็บ สำหรับรูปแบบอื่น ๆ ทั้งหมดเป็นการตัดสินใจ "สถาปัตยกรรม" ที่คุณต้องทำเพื่อตอบสนองความต้องการทางธุรกิจของคุณ โดยทั่วไปรูปแบบพื้นที่เก็บข้อมูลจะใช้ในการดำเนินการ "เอนทิตี้การโน้มน้าวใจเอนทิตี้" ซึ่งหมายความว่าเอนทิตีของคุณไม่รู้อะไรเลยเกี่ยวกับวิธีการคงอยู่ในอุปกรณ์เก็บข้อมูลของคุณ (ฐานข้อมูล, XML, TextFile ฯลฯ ) หากตัวอย่างเช่นคุณมีที่อยู่ของเอนทิตี้มันจะไม่มีตรรกะการคงอยู่ (คุณจะไม่พบที่ใด ๆ เช่น address.Save หรือ address.Update) แต่คุณจะส่งเอนทิตีของคุณไปยังวิธีการเก็บข้อมูลที่รับผิดชอบ การเปลี่ยนแปลง


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

ในความเป็นจริงคำตอบของฉันเริ่มต้นเช่น "รูปแบบพื้นที่เก็บข้อมูลไม่จำเป็นต้อง ... " มันอาจเป็นเพียงการตัดสินใจทางสถาปัตยกรรมที่ทำกับความต้องการทางธุรกิจที่เป็นมัน

ฉันเห็นด้วยอย่างยิ่งกับสิ่งนั้น แต่ฉันพลาดจุดที่เซสชันนั้นเป็นที่เก็บข้อมูลนั่นคือทั้งหมด

9

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


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