ADM เป็นรูปแบบที่ดีสำหรับการแก้ปัญหาการให้บริการแบบกระจายเช่นไมโครไซต์ มันเหมาะกับหลายกรณีธุรกิจบนเว็บในปัจจุบัน
พิจารณาว่าเรามีวัตถุโดเมนคำสั่งซื้อหรือไม่ ด้วยวิธีการของ OOP เราจะเพิ่ม Order.Purchase () Order.Cancel () ฯลฯ มันจะทำงานได้ดีในแอพเดสก์ท็อปที่เราเก็บคำสั่งซื้อไว้ในหน่วยความจำและทำหลาย ๆ
แต่ถ้าเรามีระบบกระจายกับโปรแกรมที่เพียงสิ่งเดียวคือการเข้าถึงรายการคำสั่งซื้อและซื้อแต่ละรายการในลำดับหรือรับรายการคำสั่งซื้อและยกเลิกแต่ละรายการในทางกลับกันแล้วมีวิธีการทั้งสองบนวัตถุเดียวกันทำให้ไม่มี ความรู้สึก เราจะต้องมีสองโดเมนหรือบริบทที่ถูกผูกไว้:
PurchaseSystemOrder.Purchase()
และ
CancelSystemOrder.Cancel();
สิ่งเดียวที่วัตถุเหล่านี้จะแบ่งปันคือโครงสร้างข้อมูลของคุณสมบัติ
ในขณะที่คุณเพิ่ม microservices ให้มากขึ้นคุณก็จะสามารถสั่งซื้อได้หลายสิบประเภท มันไม่มีเหตุผลที่จะพูดถึงการสั่งซื้อในฐานะที่เป็นวัตถุโดเมนอีกต่อไปแม้ว่ามันจะเป็นคำสั่งทางแนวคิดเดียวกันซึ่งกำลังถูกประมวลผลโดยระบบทั้งหมดเหล่านี้
มันสมเหตุสมผลมากกว่าที่จะมีรูปแบบแอนนิกซ์คำสั่งซื้อซึ่งเพิ่งสรุปข้อมูลและเปลี่ยนชื่อบริการของคุณตามนั้น:
PurchaseService.Purchase(Order order)
ตอนนี้เราสามารถพูดคุยเกี่ยวกับการสั่งซื้ออีกครั้งและเราสามารถเพิ่มบริการใหม่ ๆ ที่เราคิดว่าจะดำเนินการโดยไม่ส่งผลกระทบต่อบริการอื่น ๆ ที่ปรับใช้ในปัจจุบัน
Fowler and Co มาจากพื้นหลังระบบเดียวในโลกของพวกเขาแนวทางของ ADM จะหมายถึงแอพเดียวที่มีบริการแยกต่างหากทั้งหมดเหล่านี้ซึ่งสร้างอินสแตนซ์ในหน่วยความจำและ OrderDTO ถูกส่งผ่านและกลายพันธุ์ สิ่งนี้จะแย่กว่าการวางวิธีการในแบบจำลองการสั่งซื้อที่หลากหลาย
แต่ในระบบกระจายมีหลายโปรแกรมแต่ละวิธีต้องการเพียงวิธีการสั่งซื้อเดียวและทำงานในหลายคำสั่งโหลดแต่ละเรียกใช้วิธีการแล้วทิ้งมัน มันต้องการเพียงบริการเดียวและกระแสข้อมูลวัตถุ
การสร้างโมเดลที่สมบูรณ์นั้นกังวลเกี่ยวกับข้อกำหนดและการพึ่งพาของวิธีการทั้งหมดเพียงเพื่อเรียกใช้แบบเดี่ยวแล้วละทิ้งวัตถุเกือบจะในทันทีโดยไม่มีจุดหมาย
รวมทั้งการเปลี่ยนเป็นวิธีการเดียวจะต้องมีการอัพเดทส่วนประกอบแบบกระจายทั้งหมดเนื่องจากทั้งหมดขึ้นอยู่กับ Rich Model สำหรับตรรกะของพวกเขา
ฉันไม่มีที่ว่างในรหัสฐานสำหรับสิ่งที่พวกเขาไม่ต้องการ