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