Examples and Use Cases (ตัวอย่างและกรณีการใช้งาน)

EasyMeals เป็นร้านอาหารในย่านชุมชนแบบใหม่ที่เน้นการจัดส่ง เจาะกลุ่มคนทำงานที่ไม่ค่อยมีเวลาทำอาหารหลังจากกลับถึงบ้านในวันที่ยุ่งวุ่นวาย ลูกค้าที่หิวสามารถสั่งอาหารเย็นดี ๆ ทางออนไลน์และให้จัดส่งถึงหน้าประตูบ้านภายในหนึ่งชั่วโมง

ในฐานะร้านอาหารท้องถิ่นขนาดเล็ก พวกเขาไม่มีความต้องการด้าน scalability หรือ responsiveness สูงนัก และเนื่องจากงบประมาณมีจำกัด พวกเขาจึงไม่อยากใช้เงินจำนวนมากไปกับระบบซอฟต์แวร์ที่ซับซ้อน ลักษณะของปัญหาทางธุรกิจนี้ทำให้ modular monolith เป็นตัวเลือกที่ดีสำหรับ EasyMeals

Figure 11-8 แสดงให้เห็นว่าระบบจัดการร้านอาหารง่าย ๆ ของ EasyMeals อาจมีหน้าตาเป็นอย่างไรโดยใช้ modular monolith architectural style

Use case example

Figure 11-8. ระบบสั่งซื้อและจัดการร้านอาหารขนาดเล็กโดยใช้ modular monolith style

ลูกค้าเข้าถึง module PlaceOrder และ PaymentProcessing ผ่าน user interface เฉพาะ ผ่าน UI ที่แตกต่างกัน namespace ต่อไปนี้แทน module แต่ละตัวสำหรับระบบนี้:

com.easymeals.placeorder
com.easymeals.payment
com.easymeals.prepareorder
com.easymeals.delivery
com.easymeals.recipes
com.easymeals.inventory

module PlaceOrder ช่วยให้ลูกค้าแต่ละคนดูเมนู เลือกรายการ เพิ่มชื่อ ที่อยู่ และข้อมูลการชำระเงิน แล้วส่งคำสั่งซื้อ component สำหรับ module นี้อาจแทนด้วย namespace ต่อไปนี้ โดยมี source code implement ฟังก์ชันหลักแต่ละอย่างเหล่านี้:

com.easymeals.placeorder.menu
com.easymeals.placeorder.shoppingcart
com.easymeals.placeorder.customerdata
com.easymeals.placeorder.paymentdata
com.easymeals.placeorder.checkout

ตัวอย่างนี้แสดงให้เห็นว่า module ใน modular monolith ประกอบขึ้นจาก component หนึ่งตัวหรือมากกว่า (ดู Chapter 8 )

module PaymentProcessing รับผิดชอบการทำการชำระเงิน EasyMeals รับบัตรเครดิต บัตรเดบิต และ PayPal modularity ของ architecture นี้ทำให้เพิ่มประเภทการชำระเงินใหม่ (เช่น loyalty point) ได้ง่าย ลูกค้ากรอกข้อมูลนี้ใน module PlaceOrder ซึ่งจะส่งต่อไปยัง module P⁠a⁠y⁠m⁠e⁠n⁠t​P⁠r⁠o⁠c⁠e⁠s⁠s⁠i⁠n⁠g component สำหรับ module นี้อาจแทนด้วย namespace ต่อไปนี้:

com.easymeals.payment.creditcard
com.easymeals.payment.debitcard
com.easymeals.payment.paypal

เมื่อคำสั่งซื้อได้รับการชำระเงินแล้ว module PlaceOrder จะสื่อสารกับ module PrepareOrder ซึ่งแสดงคำสั่งซื้อทั้งหมดให้กับพนักงานครัว หลังจากทำอาหารเสร็จ พนักงานครัวจะทำเครื่องหมายคำสั่งซื้อว่าพร้อมจัดส่ง แล้วมันจะถูกส่งไปยัง module Delivery namespace ต่อไปนี้แทน component ภายใน module PrepareOrder :

com.easymeals.prepareorder.displayorder
com.easymeals.prepareorder.ready

module Delivery กำหนดพนักงานส่งของให้กับคำสั่งซื้อและระบุที่อยู่จัดส่ง มันช่วยให้พนักงานส่งของสามารถทำเครื่องหมายคำสั่งซื้อว่าจัดส่งแล้ว ซึ่งจบวงจรชีวิตของคำสั่งซื้อนั้น และบันทึกปัญหาใด ๆ (เช่น สุนัขดุที่หน้าประตูรั้ว หรือลูกค้าที่ไม่อยู่บ้าน) namespace ต่อไปนี้แทน component ภายใน module Delivery :

com.easymeals.delivery.assign
com.easymeals.delivery.issues
com.easymeals.delivery.complete

module Recipes ช่วยให้พ่อครัวและพนักงานฝ่ายจัดการเพิ่มรายการลงในเมนู และดูแลรายการวัตถุดิบและปริมาณสำหรับเมนูแต่ละรายการ namespace ต่อไปนี้แทน component ภายใน module Recipes :

com.easymeals.recipes.view
com.easymeals.recipes.maintenance

สุดท้ายนี้ module IngredientsInventory ทำให้แน่ใจว่ามีวัตถุดิบเพียงพอสำหรับสูตรอาหารในเมนู module นี้ซับซ้อนกว่า module อื่นเล็กน้อย มันมี AI component ที่ซับซ้อนซึ่งพยากรณ์ปริมาณยอดขายเพื่อทำการจัดหาวัตถุดิบสำหรับสัปดาห์นั้นโดยอัตโนมัติ

namespace ต่อไปนี้แทน component ภายใน module IngredientsInventory :

com.easymeals.inventory.maintenance
com.easymeals.inventory.forecasting
com.easymeals.inventory.ordering
com.easymeals.inventory.suppliers
com.easymeals.inventory.invoices

และนั่นก็คือทั้งหมด! ความเรียบง่ายและระดับ modularity ของ modular monolith ทำให้การหาและบำรุงรักษาโค้ดเพื่อแก้บั๊กหรือเพิ่มฟีเจอร์ใหม่ทำได้ค่อนข้างง่าย สิ่งนี้แสดงให้เห็นถึงพลังของ architectural style ที่เรียบง่ายและตรงไปตรงมานี้ .