คุณกำลังสร้างระบบที่ติดตาม บริษัท บริษัท เหล่านั้นมีผู้ติดต่อ ผู้ติดต่อเหล่านั้นมักเป็นผู้เชี่ยวชาญที่ตอบเฉพาะคำถามบางประเภทเท่านั้นเช่นการเรียกเก็บเงิน / ชำระเงินการขายการสั่งซื้อและการสนับสนุนลูกค้า
การใช้การออกแบบโดเมนขับเคลื่อนและสถาปัตยกรรมหัวหอมฉันได้ทำแบบจำลองนี้ด้วยประเภทต่อไปนี้:
- บริษัท
- มีผู้ติดต่อ
- ติดต่อ
- มีประเภทการติดต่อ
- ContactType (enum)
- CompanyRepository (อินเตอร์เฟส)
- EFCompanyRepository (กำหนดไว้ในแอสเซมบลีภายนอกใช้ EntityFramework ดำเนินการ CompanyRepository)
ทีมของเรามีความเห็นแยกกันเกี่ยวกับวิธีการสร้างแบบจำลองฐานข้อมูลสำหรับแอปพลิเคชันนี้
ด้าน A: DDDers แบบ Lean:
- เป็นหน้าที่ของโดเมนในการกำหนดว่า ContactTypes ใดที่ถูกต้องสำหรับที่ติดต่อ การเพิ่มตารางไปยังฐานข้อมูลเพื่อตรวจสอบว่า ContactTypes ที่ไม่รู้จักไม่ได้ถูกบันทึกเป็นสัญลักษณ์ของโดเมนที่รั่ว มันกระจายตรรกะออกไปไกลเกินไป
- การเพิ่มตารางคงที่ในฐานข้อมูลและรหัสที่เกี่ยวข้องนั้นสิ้นเปลือง ในแอปพลิเคชั่นนี้ฐานข้อมูลแก้ปัญหาหนึ่ง: ยืนยันสิ่งนั้นและส่งคืนให้ฉัน การเขียนตารางพิเศษและรหัส CRUD ที่เกี่ยวข้องนั้นสิ้นเปลือง
- การเปลี่ยนกลยุทธ์เพื่อการคงอยู่นั้นง่ายที่สุดเท่าที่จะทำได้ มีแนวโน้มที่จะเปลี่ยนกฎธุรกิจ ถ้าฉันตัดสินใจว่า SQL Server มีค่าใช้จ่ายมากเกินไปฉันไม่ต้องการสร้างการตรวจสอบความถูกต้องทั้งหมดที่ฉันใส่ไว้ในสคีมาใหม่อีกครั้ง
ด้าน B: นักอนุรักษนิยม [นั่นอาจไม่ใช่ชื่อที่ยุติธรรม DBCentrists?]:
- เป็นความคิดที่ดีที่จะมีข้อมูลในฐานข้อมูลที่ไม่สมเหตุสมผลหากไม่มีการอ่านโค้ด รายงานและผู้บริโภคอื่น ๆ ต้องทำซ้ำรายการของค่าตัวเอง
- มันไม่ได้เป็นรหัสที่มากพอที่จะโหลดพจนานุกรมประเภท db ของคุณตามความต้องการ ไม่ต้องกังวลกับมัน
- หากแหล่งที่มาของรหัสนี้ไม่ใช่ข้อมูลฉันจะต้องปรับใช้บิตแทนสคริปต์ SQL อย่างง่ายเมื่อมีการเปลี่ยนแปลง
ด้านใดถูกหรือผิด แต่อย่างใดอย่างหนึ่งอาจมีประสิทธิภาพมากขึ้นในระยะยาวการนับเวลาการพัฒนาสำหรับการพัฒนาเริ่มต้นข้อบกพร่อง ฯลฯ ด้านใด - หรือมีการประนีประนอมที่ดีกว่า? ทีมอื่น ๆ ที่เขียนโค้ดลักษณะนี้ทำอะไร