ระหว่างฝึกงานฉันได้ใช้NHibernateกับโปรเจ็กต์ขนาดเล็กบางโปรเจ็กต์ซึ่งส่วนใหญ่ฉันเขียนโค้ดและออกแบบด้วยตัวเอง ตอนนี้ก่อนที่จะเริ่มโปรเจ็กต์ที่ใหญ่กว่านี้มีการอภิปรายกันว่าจะออกแบบการเข้าถึงข้อมูลอย่างไรและจะใช้เลเยอร์ ORM หรือไม่ ในขณะที่ฉันยังอยู่ในการฝึกงานและยังคงคิดว่าตัวเองเป็นมือใหม่ในการเขียนโปรแกรมระดับองค์กรฉันจึงไม่ได้พยายามผลักดันในความคิดของฉันซึ่งก็คือการใช้ตัวทำแผนที่เชิงสัมพันธ์กับฐานข้อมูลสามารถทำให้การพัฒนาง่ายขึ้นได้มาก นักเขียนโค้ดคนอื่น ๆ ในทีมพัฒนามีประสบการณ์มากกว่าฉันมากดังนั้นฉันคิดว่าฉันจะทำตามที่พวกเขาพูด :-)
อย่างไรก็ตามฉันไม่เข้าใจเหตุผลหลักสองประการที่ไม่ใช้ NHibernate หรือโครงการที่คล้ายกัน:
- เราสามารถสร้างอ็อบเจ็กต์การเข้าถึงข้อมูลของตัวเองด้วยคิวรี SQL และคัดลอกแบบสอบถามเหล่านั้นออกจาก Microsoft SQL Server Management Studio
- การดีบัก ORM อาจเป็นเรื่องยาก
ดังนั้นแน่นอนว่าฉันสามารถสร้างชั้นการเข้าถึงข้อมูลของฉันด้วยจำนวนมากSELECT
ฯลฯ แต่ที่นี่ฉันพลาดข้อได้เปรียบของการรวมอัตโนมัติคลาสพร็อกซีที่โหลดขี้เกียจและความพยายามในการบำรุงรักษาที่ต่ำกว่าหากตารางได้รับคอลัมน์ใหม่หรือคอลัมน์ได้รับ เปลี่ยนชื่อ (การอัปเดตจำนวนมากSELECT
, INSERT
และUPDATE
คำสั่งกับการอัปเดตการตั้งค่าการทำแผนที่และอาจ refactoring เรียนธุรกิจและ DTOs.)
นอกจากนี้การใช้ NHibernate คุณสามารถประสบปัญหาที่คาดไม่ถึงหากคุณไม่รู้จักกรอบงานเป็นอย่างดี ตัวอย่างเช่นเชื่อมั่น Table.hbm.xml ที่คุณตั้งค่าความยาวของสตริงให้ตรวจสอบโดยอัตโนมัติ อย่างไรก็ตามฉันยังสามารถจินตนาการถึงจุดบกพร่องที่คล้ายกันในชั้นการเข้าถึงข้อมูลแบบ "ง่ายๆ" SqlConnection
ในที่สุดข้อโต้แย้งเหล่านั้นที่กล่าวถึงข้างต้นเป็นเหตุผลที่ดีที่จะไม่ใช้ ORM สำหรับแอปพลิเคชันองค์กรตามฐานข้อมูลที่ไม่สำคัญหรือไม่? อาจมีข้อโต้แย้งอื่น ๆ ที่พวกเขา / ฉันอาจพลาดไปหรือไม่?
(ฉันควรจะเพิ่มว่าฉันคิดว่านี่เป็นเหมือนแอปพลิเคชันที่ใช้“ ใหญ่”. NET / C # ตัวแรกซึ่งจะต้องมีการทำงานเป็นทีมแนวทางปฏิบัติที่ดีซึ่งถูกมองว่าเป็นเรื่องปกติใน Stack Overflow เช่นการทดสอบหน่วยหรือการผสานรวมอย่างต่อเนื่องนั้นไม่ใช่ - มีอยู่ที่นี่จนถึงปัจจุบัน)