นี่เป็นคำถามปลายเปิดเล็กน้อย แต่ฉันต้องการความคิดเห็นบางอย่างเนื่องจากฉันโตขึ้นในโลกที่สคริปต์ SQL แบบอินไลน์เป็นบรรทัดฐานจากนั้นเราทุกคนต่างก็ตระหนักถึงปัญหาการฉีด SQL ที่ใช้กันมากและ sql นั้นบอบบางเพียงใด ทำการปรับแต่งสตริงทั่วทุกที่
จากนั้นก็เริ่มรุ่งอรุณของ ORM ซึ่งคุณได้อธิบายการสืบค้นไปยัง ORM และปล่อยให้มันสร้าง SQL ของตัวเองซึ่งในหลายกรณีนั้นไม่เหมาะสมแต่ปลอดภัยและง่าย สิ่งที่ดีอีกอย่างเกี่ยวกับ ORMs หรือเลเยอร์สิ่งที่เป็นนามธรรมของเลเยอร์คือว่า SQL นั้นถูกสร้างขึ้นด้วยเอ็นจิ้นฐานข้อมูลของมันดังนั้นฉันสามารถใช้ Hibernate / Nhibernate กับ MSSQL, MYSQL และรหัสของฉันไม่เคยเปลี่ยน
ตอนนี้ก้าวไปข้างหน้าอย่างรวดเร็วจนถึงปัจจุบันซึ่ง Micro ORM ดูเหมือนจะชนะมากกว่านักพัฒนาอื่น ๆ ฉันสงสัยว่าทำไมเราถึงได้นำ U-Turn มาใช้กับเรื่องทั้งหมดในตาราง
ฉันต้องยอมรับว่าฉันชอบความคิดที่ว่าไม่มีไฟล์ ORM config และความสามารถในการเขียนข้อความค้นหาของฉันในลักษณะที่เหมาะสมที่สุด แต่รู้สึกเหมือนฉันกำลังเปิดตัวเองกลับสู่ช่องโหว่เก่า ๆ เช่นการฉีด SQL และฉันก็ผูกตัวเอง เอ็นจิ้นฐานข้อมูลหนึ่งดังนั้นถ้าฉันต้องการซอฟต์แวร์ของฉันเพื่อสนับสนุนเอนจินฐานข้อมูลหลายตัวฉันจะต้องทำการแฮ็คสตริงเพิ่มเติมซึ่งดูเหมือนว่าจะเริ่มทำให้โค้ดอ่านไม่ได้และเปราะบางยิ่งขึ้น (ก่อนที่ใครบางคนจะกล่าวถึงมันฉันรู้ว่าคุณสามารถใช้อาร์กิวเมนต์ที่อิงพารามิเตอร์กับ micro orms ส่วนใหญ่ที่ให้ความคุ้มครองในกรณีส่วนใหญ่จากการฉีด sql)
ดังนั้นความคิดเห็นของประชาชนในเรื่องนี้คืออะไร? ฉันใช้ Dapper เป็น Micro ORM ของฉันในอินสแตนซ์นี้และ NHibernate เป็น ORM ปกติของฉันในสถานการณ์นี้อย่างไรก็ตามส่วนใหญ่ในแต่ละฟิลด์นั้นค่อนข้างคล้ายกัน
สิ่งที่ฉันเรียกว่าอินไลน์ sqlคือสตริง SQL ภายในซอร์สโค้ด เคยมีการออกแบบการถกเถียงเกี่ยวกับสตริง SQL ในซอร์สโค้ดซึ่งแยกออกจากเจตนาพื้นฐานของตรรกะซึ่งเป็นสาเหตุที่แบบสอบถามสไตล์ linq ที่พิมพ์แบบคงที่กลายเป็นที่นิยมมากจนยังคงเป็นเพียงแค่ 1 ภาษา แต่ด้วยการบอกว่า C # และ Sql ในหน้าเดียว 2 ภาษาผสมกันในซอร์สโค้ดดิบของคุณทันที เพื่อชี้แจงการฉีด SQL เป็นเพียงหนึ่งในปัญหาที่รู้จักกับการใช้สตริง sql ฉันพูดถึงคุณสามารถหยุดสิ่งนี้เกิดขึ้นกับแบบสอบถามตามพารามิเตอร์ แต่ฉันเน้นปัญหาอื่น ๆ ด้วยการมีแบบสอบถาม SQL ฝังอยู่ในซอร์สโค้ดของคุณเช่น การขาด DB Vendor abstraction รวมถึงการสูญเสียข้อผิดพลาดในการรวบรวมเวลาในระดับใด ๆ ที่จับกับการสืบค้นแบบใช้สตริงซึ่งเป็นปัญหาทั้งหมดที่เราจัดการไปด้านข้างด้วยรุ่งอรุณของ ORMs ด้วยฟังก์ชันการสืบค้นระดับสูง
ดังนั้นฉันจึงให้ความสำคัญกับปัญหาที่เน้นเป็นรายบุคคลน้อยลงและภาพรวมที่ใหญ่ขึ้นคือตอนนี้กลายเป็นที่ยอมรับได้มากกว่าที่จะมีสตริง SQL ในซอร์สโค้ดของคุณโดยตรงอีกครั้งเนื่องจาก Micro ORM ส่วนใหญ่ใช้กลไกนี้
นี่คือคำถามที่คล้ายกันซึ่งมีมุมมองที่แตกต่างกันเล็กน้อยถึงแม้ว่าจะเป็นข้อมูลเพิ่มเติมเกี่ยวกับ sql แบบอินไลน์โดยไม่มีบริบท orm ขนาดเล็ก:
https://stackoverflow.com/questions/5303746/is-inline-sql-hard-coding