แบบจำลองโดเมนในฐานข้อมูลสามารถเป็นทางออกที่ยั่งยืนได้หรือไม่


13

ฉันเพิ่งเริ่มงานใหม่ในฐานะผู้พัฒนาฐานข้อมูลสำหรับ บริษัท ขนาดกลาง - เล็กที่ใช้เทคโนโลยีของ Microsoft ฉันสังเกตเห็นตั้งแต่เนิ่นๆว่าการปฏิบัติที่เบี่ยงเบนไปจากสิ่งที่ฉันได้รับการสอนที่โรงเรียนเกี่ยวกับวิธีปฏิบัติที่ดีที่สุดรูปแบบการออกแบบการทดสอบและการจัดการโครงการ

สิ่งที่ดักฟังฉันมากที่สุดคือวิธีที่ผู้พัฒนาฐานข้อมูลหลักของเรา (ต่อจากนี้เรียกว่า "จอห์น") จะเก็บแบบแผนโมเดลในฐานข้อมูล! เราทำสิ่งนี้โดยมีตาราง 3 "เวทมนตร์"; หนึ่งสำหรับฐานข้อมูลสกีมาสำหรับหนึ่งตารางและอีกหนึ่งสำหรับคอลัมน์

การแทรกเร็กคอร์ดลงใน " Tables " -table สร้าง (ผ่านทริกเกอร์ฐานข้อมูล), ตารางจริง, ที่สอดคล้องกัน การแทรกแถวในตาราง " แถว " จะเป็นการอัพเดตตารางที่อ้างอิงด้วยแถวนั้น สิ่งเหล่านี้กลับถูกอ่านโดย C # -program แบบโฮมเมดของเขาเพื่อสร้างแบบจำลอง C # ซึ่งถูกใช้โดย frontend-Developers สำหรับตัวควบคุมและด้านนอก

นอกเหนือจากนี้การพัฒนาส่วนใหญ่จะทำตามกรอบASP.NET MVC

ฉันเห็นข้อบกพร่องสองสามข้อด้วยวิธีนี้:

  • เราต้องการให้เขารักษา ORM และเขาไม่ค่อยมีเวลาทำ (ความมั่นคงในการทำงานดีมาก!
  • ทริกเกอร์สำหรับตาราง "ตาราง" และ "แถว" มีข้อบกพร่อง พวกเขาไม่สนับสนุนการปรับปรุงตารางหรือตรวจสอบข้อ จำกัด หรือคุณสมบัติ "ขั้นสูง" เพิ่มเติม ในขณะที่เราสามารถปรับปรุงพวกเขาอย่างแน่นอนฉันยังไม่แน่ใจว่านี่เป็นวิธีที่จะไปไหม
  • การรักษาตรรกะการเขียนโปรแกรมไว้ในฐานข้อมูลทำให้รู้สึกแปลกและ จำกัด (แม้ว่าจะเป็นไปได้ที่จะขยายโมเดลของเขาผ่าน C #)
  • เครื่องกำเนิดรุ่น C # ของเขาจะต้องทำงานด้วยตนเองโดยหนึ่งใน 3 คน (ซึ่งฉันเป็นหนึ่ง) และยังไม่เป็นผู้ใหญ่พอที่จะรวมไว้ในกระบวนการสร้างอัตโนมัติ

หลายคนแนะนำการวางขั้นตอนในผลิตภัณฑ์จริงและผ่านการทดสอบเช่นEntity Frameworkแต่เขาปฏิเสธว่าการรักษาตรรกะทางธุรกิจในเลเยอร์โค้ดนั้นเหมาะสำหรับแอปพลิเคชันขนาดเล็กและโครงการบูตสแตรปสำหรับผู้เริ่มต้น

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

การรักษาแบบจำลองโดเมนในฐานข้อมูลเป็นโซลูชั่นที่ยั่งยืนสำหรับ บริษัท ที่กำลังเติบโตหรือไม่?


แบบจำลองโดเมนนั้นเชื่อมโยงกับการออกแบบที่ขับเคลื่อนด้วยโดเมนอย่างใกล้ชิด จุดทั้งหมดของการออกแบบโดเมนจะต้องเป็นอิสระจากการออกแบบที่ขับเคลื่อนด้วยข้อมูลซึ่งข้อมูล (เช่นฐานข้อมูล) เป็นแกนหลักของแอปพลิเคชัน กล่าวว่าวิธีการและรูปแบบโดเมนไม่ได้ไปด้วยกันจริงๆ เมื่อพัฒนาตามแนวทางการออกแบบที่ขับเคลื่อนด้วยโดเมนคุณไม่สนใจว่าข้อมูลมาจากไหนคุณเพียงแค่ใช้มันและดำเนินการกับตรรกะในชั้นธุรกิจของคุณ
แอนดี้

ฉันไม่ชัดเจนในสิ่งที่คุณหมายถึงโดย "รักษาตรรกะการเขียนโปรแกรมในฐานข้อมูล" คุณช่วยอธิบายได้ไหม?
Robert Harvey

ตรรกะทางธุรกิจในรหัสเป็นวิธีที่ถูกต้อง db ควรเป็น datastore ที่เป็นใบ้ไม่มีอะไรอื่น
แอนดี้

@ ฉันเดาว่ามันขึ้นอยู่กับ อาจเป็น DBA ของพวกเขาเป็นศูนย์กลางของทีมและเขาเก็บตรรกะทางธุรกิจทั้งหมดไว้ในฐานข้อมูลซึ่งจะถูกสอบถามโดยการโทร procs ที่เก็บไว้แล้วแยกข้อมูลออกเป็น POCO เป็นต้นนี่เป็นแนวทางที่น่าสงสัย แต่ฉันรู้จักทีมทำให้ตรรกะทางธุรกิจส่วนใหญ่ ถ้าไม่ใช่ทั้งหมดใน DB
Vladislav Rastrusny

@VladislavRastrusny ไม่ว่าจะด้วยเหตุผลใดก็ตามการรักษาตรรกะทางธุรกิจไว้ในฐานข้อมูลนั้นเป็นการออกแบบที่แย่มาก
Andy

คำตอบ:


16

คุณกำลังอธิบายแพลตฟอร์มชั้นใน

ปัญหาเกี่ยวกับแพลตฟอร์มภายในคือคุณบูรณาการกลไกทั้งหมดของแพลตฟอร์มหรือเทคโนโลยี (ในกรณีนี้คือฐานข้อมูลเชิงสัมพันธ์) ที่ได้รับการฝึกฝนและสมบูรณ์แบบในช่วงทศวรรษที่ผ่านมาของการพัฒนาและความพยายาม คุณกำลังข้ามการปรับแต่งทั้งหมดที่มีให้กับผู้ที่เลือกการออกแบบแบบดั้งเดิมมากขึ้นและซื้อขายความเรียบง่ายและความสง่างามเบื้องต้นสำหรับความซับซ้อนและความยากลำบากในอนาคต

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

โปรดทราบว่า ORM ส่วนใหญ่ที่ใช้วิธี "table-first" เพียงแค่ดูโครงสร้างของตารางในฐานข้อมูลเพื่อสร้างคลาส ตาราง "ตาราง" และ "แถว" ที่เพื่อนของคุณสร้างขึ้นเป็นเพียงเมทาดาทาที่มีอยู่แล้วในตารางระบบของระบบฐานข้อมูลเชิงสัมพันธ์ที่ทันสมัยที่สุด

การอ่านเพิ่มเติม
โครงการ "Vision" เป็นคำเตือนเกี่ยวกับเอฟเฟกต์ด้านใน
(คุณสามารถข้ามบทนำและเริ่มอ่านได้ที่หัวข้อย่อย "Introducing Vision")


2
การอ่านที่น่าสนใจฉันสามารถวาดแอนนี่อย่างแน่นอน ฉันยังใหม่อยู่และจะยังคงเป็นผู้ชมในตอนนี้ แต่ฉันจะเก็บไว้ใต้เลนส์แน่นอน ขอบคุณสำหรับการตอบรับที่ดี!
krystah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.