0001 — DDD ที่เข้มงวดกับ Core บริสุทธิ์
บริบท
แอปพลิเคชันนี้เคลื่อนย้ายเงินจริง กฎธุรกิจที่กระจัดกระจายไปทั่วจุดปลายทาง บริการพื้นหลัง และส่วนประกอบ Razor จะเสื่อมสภาพเป็นพฤติกรรมที่ไม่สามารถทดสอบได้และไม่สอดคล้องกัน — ตรงที่บั๊กค่าใช้จ่ายของผู้ใช้ทุนอย่างแน่นอน
การตัดสินใจ
ตรรมชาติด้านธุรกิจอาศัยอยู่ บนตัวรวม วัตถุค่า และบริการด้านธุรกิจ ใน src/Core ซึ่งรวบรวมด้วย การขึ้นต่อกับโครงสร้างพื้นฐานเป็นศูนย์ (ไม่มี EF, HttpClient, Docker หรือ ASP.NET) จุดปลายทาง เครื่องมือ MCP องค์ประกอบ และ BackgroundService จัดการ — พวกมันไม่เคยตัดสินใจ กฎ:
- ไม่มีตัวตั้งค่าสาธารณะ; การเปลี่ยนแปลงสถานะผ่านวิธีการเปิดเผยจำนวนจำหน่ายที่พิทักษ์ค่าคงที่
- ตัวรวมอ้างอิงถึงกันและกันโดย รหัสที่แข็งแกร่ง ไม่ใช่คุณสมบัติการนำทาง
SaveChangesหนึ่งแอพได้รับผลกระทบจาก one ตัวรวม; การไหลข้ามตัวรวมใช้เหตุการณ์ด้านธุรกิจ- ค่ากำหนดที่ข้ามขอบเขตโดเมนจะถูกห่อหุ้มในวัตถุค่า
- การละเมิดค่าคงที่จะทำให้เกิด
DomainExceptionของ Core ไม่ใช่ข้อยกเว้นของเฟรมเวิร์ก
ผลที่ตามมา
- กฎด้านธุรกิจสามารถทดสอบหน่วยได้โดยไม่มีฐานข้อมูลหรือโฮสต์เว็บ
- ความบริสุทธิ์ของ
Coreได้รับการบังคับใช้โดยเครื่องจักรโดยArchitectureGuardTestsและจะล้มเหลวในการสร้างหากถูกทำลาย - มีพิธีกรรมมากขึ้น (วัตถุค่า รหัสที่แข็งแกร่ง เหตุการณ์ด้านธุรกิจ) กว่าแบบจำลองที่มีการตั้งค่า — นี่คือต้นทุนที่เจตนาของการรักษากฎเกณฑ์เคลื่อนเงินให้ถูกต้องและอยู่ในที่เดียว