ฉันต้องการเห็นการถกเถียงกันอย่างซื่อสัตย์และรอบคอบเกี่ยวกับข้อดีของกระบวนทัศน์การออกแบบแอปพลิเคชันองค์กรที่ยอมรับในปัจจุบัน
ฉันไม่มั่นใจว่าควรมีวัตถุเอนทิตี
โดยวัตถุเอนทิตี้ฉันหมายถึงสิ่งทั่วไปที่เรามักจะสร้างสำหรับแอปพลิเคชันของเราเช่น "บุคคล", "บัญชี", "สั่งซื้อ" ฯลฯ
ปรัชญาการออกแบบปัจจุบันของฉันคือ:
- การเข้าถึงฐานข้อมูลทั้งหมดจะต้องสำเร็จผ่านขั้นตอนการจัดเก็บ
- เมื่อใดก็ตามที่คุณต้องการข้อมูลให้เรียกโพรซีเดอร์ที่เก็บไว้แล้ววนซ้ำ SqlDataReader หรือแถวใน DataTable
(หมายเหตุ: ฉันได้สร้างแอพพลิเคชั่นระดับองค์กรด้วย Java EE, java folks โปรดแทนที่ค่าที่เท่าเทียมกันสำหรับตัวอย่าง. NET ของฉัน)
ฉันไม่ต่อต้าน OO ฉันเขียนคลาสจำนวนมากเพื่อจุดประสงค์ที่แตกต่างกัน ฉันจะยอมรับว่าส่วนใหญ่ของชั้นเรียนที่ฉันเขียนเป็นชั้นเรียนผู้ช่วยคงที่
ฉันไม่ได้สร้างของเล่น ฉันกำลังพูดถึงแอพพลิเคชั่นธุรกรรมขนาดใหญ่และปริมาณสูงที่ติดตั้งในเครื่องหลายเครื่อง แอปพลิเคชั่นเว็บ, บริการ windows, บริการเว็บ, การโต้ตอบ b2b, คุณตั้งชื่อมัน
ฉันใช้ OR Mappers แล้ว ฉันได้เขียนไม่กี่ ฉันใช้ Java EE stack, CSLA และอื่น ๆ ที่เทียบเท่า ฉันไม่เพียง แต่ใช้มันเท่านั้น แต่ยังพัฒนาและดูแลแอพพลิเคชั่นเหล่านี้อย่างต่อเนื่องในสภาพแวดล้อมการผลิต
ฉันได้มาถึงข้อสรุปการต่อสู้ผ่านการทดสอบว่าวัตถุนิติบุคคลที่จะได้รับในทางของเราและชีวิตของเราจะเป็นเช่นนั้นง่ายมากโดยที่พวกเขา
ลองพิจารณาตัวอย่างง่ายๆนี้: คุณได้รับการสนับสนุนการโทรเกี่ยวกับหน้าบางหน้าในแอปพลิเคชันของคุณที่ทำงานไม่ถูกต้องอาจเป็นหนึ่งในฟิลด์ที่ไม่ได้ถูกยืนยันเหมือนที่ควรจะเป็น ด้วยรูปแบบของฉันนักพัฒนาที่ได้รับมอบหมายในการค้นหาปัญหาเปิดตรง 3 ไฟล์ ASPX, ASPX.CS และไฟล์ SQL ที่มีโพรซีเดอร์ที่เก็บไว้ ปัญหาซึ่งอาจเป็นพารามิเตอร์ที่ขาดหายไปจากการเรียกโพรซีเดอร์ที่เก็บไว้ใช้เวลาในการแก้ไขไม่กี่นาที แต่ด้วยเอนทิตีโมเดลใด ๆ คุณจะเริ่มทำงานดีบั๊กเริ่มก้าวผ่านโค้ดและคุณอาจเปิดไฟล์ 15-20 ไฟล์ใน Visual Studio เมื่อคุณก้าวลงมาที่ด้านล่างของสแต็คคุณลืมตำแหน่งที่คุณเริ่ม เราสามารถเก็บสิ่งต่าง ๆ ไว้ในหัวได้ในคราวเดียวเท่านั้น ซอฟต์แวร์มีความซับซ้อนอย่างเหลือเชื่อโดยไม่ต้องเพิ่มเลเยอร์ที่ไม่จำเป็นใด ๆ
ความซับซ้อนและการแก้ไขปัญหาการพัฒนาเป็นเพียงด้านเดียวของฉัน
ตอนนี้เรามาพูดเกี่ยวกับความยืดหยุ่น
นักพัฒนาตระหนักหรือไม่ว่าทุกครั้งที่พวกเขาเขียนหรือแก้ไขโค้ดใด ๆ ที่มีปฏิสัมพันธ์กับฐานข้อมูลพวกเขาจำเป็นต้องทำการวิเคราะห์อย่างหนักแน่นถึงผลกระทบที่แน่นอนในฐานข้อมูลหรือไม่? และไม่ใช่แค่สำเนาการพัฒนาฉันหมายถึงการเลียนแบบการผลิตดังนั้นคุณจะเห็นได้ว่าคอลัมน์เพิ่มเติมที่คุณต้องการสำหรับวัตถุของคุณเพิ่งทำให้แผนการค้นหาปัจจุบันใช้ไม่ได้และรายงานที่ทำงานใน 1 วินาทีจะใช้เวลา 2 นาที เพราะคุณเพิ่มคอลัมน์เดียวลงในรายการที่เลือกหรือไม่ และปรากฎว่าดัชนีที่คุณต้องการในตอนนี้มีขนาดใหญ่มากจน DBA ต้องปรับเปลี่ยนเค้าโครงทางกายภาพของไฟล์ของคุณหรือไม่
หากคุณปล่อยให้ผู้คนอยู่ห่างจากแหล่งข้อมูลทางกายภาพด้วยการใช้นามธรรมพวกเขาจะสร้างความเสียหายด้วยแอพพลิเคชั่นที่ต้องการปรับขนาด
ฉันไม่ใช่คนกระตือรือร้น ฉันสามารถมั่นใจได้ถ้าฉันผิดและอาจเป็นเพราะมีแรงผลักดันอย่างมากต่อ Linq ไปยัง Sql, ADO.NET EF, Hibernate, Java EE ฯลฯ โปรดคิดถึงการตอบสนองของคุณหากฉันพลาดบางสิ่งที่ฉันทำ อยากรู้ว่ามันคืออะไรและทำไมฉันจึงควรเปลี่ยนความคิดของฉัน
[แก้ไข]
ดูเหมือนว่าคำถามนี้จะเปิดใช้งานอีกครั้งทันทีดังนั้นตอนนี้เรามีคุณลักษณะความคิดเห็นใหม่ที่ฉันได้แสดงความคิดเห็นโดยตรงกับคำตอบหลายข้อ ขอบคุณสำหรับการตอบกลับฉันคิดว่านี่เป็นการสนทนาที่ดีต่อสุขภาพ
ฉันน่าจะชัดเจนว่าฉันกำลังพูดถึงแอปพลิเคชันระดับองค์กร ฉันไม่สามารถแสดงความคิดเห็นพูดเกมที่ทำงานบนเดสก์ท็อปของใครบางคนหรือแอพมือถือ
สิ่งหนึ่งที่ฉันต้องวางไว้ที่นี่เพื่อตอบสนองต่อคำตอบที่คล้ายกันหลายประการ: ความตั้งฉากและการแยกความกังวลมักได้รับการอ้างถึงว่าเป็นเหตุผลในการเข้าสู่องค์กร / ORM ขั้นตอนการจัดเก็บสำหรับฉันเป็นตัวอย่างที่ดีที่สุดของการแยกข้อกังวลที่ฉันนึกถึง หากคุณไม่อนุญาตให้เข้าถึงฐานข้อมูลอื่นนอกเหนือจากผ่านขั้นตอนการจัดเก็บคุณสามารถออกแบบรูปแบบข้อมูลทั้งหมดโดยไม่ทำลายรหัสใด ๆ ได้ตราบใดที่คุณยังคงรักษาอินพุตและเอาท์พุทของโพรซีเดอร์ที่เก็บไว้ พวกเขาเป็นตัวอย่างที่สมบูรณ์แบบของการเขียนโปรแกรมตามสัญญา (ตราบใดที่คุณหลีกเลี่ยง "select *" และบันทึกชุดผลลัพธ์)
ถามคนที่อยู่ในอุตสาหกรรมมาเป็นเวลานานและทำงานกับแอปพลิเคชันที่มีอายุใช้งานยาวนาน: แอปพลิเคชันและเลเยอร์ UI มีมากี่ครั้งแล้วและหายไปในขณะที่ฐานข้อมูลใช้งานอยู่ ยากแค่ไหนที่จะปรับและสร้างฐานข้อมูลใหม่เมื่อมีเลเยอร์การคงอยู่ที่แตกต่างกัน 4 หรือ 5 ชั้นที่สร้าง SQL เพื่อรับข้อมูล คุณไม่สามารถเปลี่ยนแปลงอะไร! ORMs หรือรหัสใด ๆ ที่สร้าง SQL จะล็อคฐานข้อมูลของคุณในทันที