Skip to main content

0001 — DDD ที่เข้มงวดกับ Core บริสุทธิ์

บริบท​

แอปพลิเคชันนี้เคลื่อนย้ายเงินจริง กฎธุรกิจที่กระจัดกระจายไปทั่วจุดปลายทาง บริการพื้นหลัง และส่วนประกอบ Razor จะเสื่อมสภาพเป็นพฤติกรรมที่ไม่สามารถทดสอบได้และไม่สอดคล้องกัน — ตรงที่บั๊กค่าใช้จ่ายของผู้ใช้ทุนอย่างแน่นอน

การตัดสินใจ​

ตรรมชาติด้านธุรกิจอาศัยอยู่ บนตัวรวม วัตถุค่า และบริการด้านธุรกิจ ใน src/Core ซึ่งรวบรวมด้วย การขึ้นต่อกับโครงสร้างพื้นฐานเป็นศูนย์ (ไม่มี EF, HttpClient, Docker หรือ ASP.NET) จุดปลายทาง เครื่องมือ MCP องค์ประกอบ และ BackgroundService จัดการ — พวกมันไม่เคยตัดสินใจ กฎ:

  • ไม่มีตัวตั้งค่าสาธารณะ; การเปลี่ยนแปลงสถานะผ่านวิธีการเปิดเผยจำนวนจำหน่ายที่พิทักษ์ค่าคงที่
  • ตัวรวมอ้างอิงถึงกันและกันโดย รหัสที่แข็งแกร่ง ไม่ใช่คุณสมบัติการนำทาง
  • SaveChanges หนึ่งแอพได้รับผลกระทบจาก one ตัวรวม; การไหลข้ามตัวรวมใช้เหตุการณ์ด้านธุรกิจ
  • ค่ากำหนดที่ข้ามขอบเขตโดเมนจะถูกห่อหุ้มในวัตถุค่า
  • การละเมิดค่าคงที่จะทำให้เกิด DomainException ของ Core ไม่ใช่ข้อยกเว้นของเฟรมเวิร์ก

ผลที่ตามมา​

  • กฎด้านธุรกิจสามารถทดสอบหน่วยได้โดยไม่มีฐานข้อมูลหรือโฮสต์เว็บ
  • ความบริสุทธิ์ของ Core ได้รับการบังคับใช้โดยเครื่องจักรโดย ArchitectureGuardTests และจะล้มเหลวในการสร้างหากถูกทำลาย
  • มีพิธีกรรมมากขึ้น (วัตถุค่า รหัสที่แข็งแกร่ง เหตุการณ์ด้านธุรกิจ) กว่าแบบจำลองที่มีการตั้งค่า — นี่คือต้นทุนที่เจตนาของการรักษากฎเกณฑ์เคลื่อนเงินให้ถูกต้องและอยู่ในที่เดียว