Logical Versus Physical Architecture (Logical กับ Physical Architecture)
logical architecture ประกอบด้วย logical component (building block) ของระบบและวิธีที่พวกมันปฏิสัมพันธ์กัน มันมักแสดงการปฏิสัมพันธ์กับ actor ต่าง ๆ ด้วย (ผู้ใช้ที่ปฏิสัมพันธ์กับระบบ) และอาจแสดง repository (ไม่ใช่ฐานข้อมูล) เพื่อชี้ให้เห็นว่าข้อมูลถูกใช้หรือส่งต่อระหว่าง component ที่ไหนบ้าง Figure 8-4 แสดงตัวอย่างของ logical architecture
Figure 8-4. Diagram of a logical architecture
แผนภาพ logical architecture มักไม่แสดง user interface ฐานข้อมูล service หรือ physical artifact อื่น ๆ แต่จะแสดง logical component และวิธีที่พวกมันปฏิสัมพันธ์กัน ซึ่งควรตรงกับโครงสร้างไดเรกทอรีและ namespace ที่ใช้จัดระเบียบโค้ด
ในทางกลับกัน physical architecture รวมถึง physical artifact ต่าง ๆ เช่น service, user interface, ฐานข้อมูล และอื่น ๆ Figure 8-5 เป็นตัวอย่างแผนภาพ physical architecture
Figure 8-5. Diagram of a physical architecture
physical architecture ของระบบควรสะท้อน architectural style หนึ่งอย่าง (หรือมากกว่า) จากหลาย ๆ แบบที่อธิบายไว้ใน Part II ของหนังสือเล่มนี้อย่างใกล้ชิด ไม่ว่าจะเป็น microservices, layered architecture, event-driven architecture และอื่น ๆ
สถาปนิกหลายคนเลือกที่จะข้ามการสร้าง logical architecture แล้วเริ่มต้นที่ physical architecture โดยตรง แต่เราแนะนำให้หลีกเลี่ยงแนวทางนี้ เพราะ physical architecture ไม่ได้แสดงเสมอไปว่าฟังก์ชันการทำงานของระบบอยู่ที่ไหนและประกอบกันอย่างไร ตัวอย่างเช่น ใน physical architecture ฟังก์ชันประมวลผลการชำระเงินอาจกระจายอยู่ในหลาย service ทำให้ยากที่จะเห็นว่ามันปฏิสัมพันธ์กับส่วนอื่น ๆ ของระบบอย่างไร นอกจากนี้ physical architecture ยังไม่ให้แนวทางแก่ทีมพัฒนาว่าจะสร้างระบบแบบ monolithic หรือ distributed หรือจัดระเบียบโค้ดอย่างไร ซึ่งมักส่งผลให้ได้ architecture ที่ไร้โครงสร้าง ดูแลรักษา ทดสอบ และ deploy ได้ยาก
โดยทั่วไป logical architecture ของระบบเป็นอิสระจาก physical architecture ของมัน กล่าวคือ เมื่อสร้าง logical architecture จุดโฟกัสจะอยู่ที่ระบบทำอะไร ฟังก์ชันการทำงานถูกแบ่งเขตอย่างไร และส่วนต่าง ๆ ของระบบปฏิสัมพันธ์กันอย่างไร มากกว่าโครงสร้างทางกายภาพของมัน ตัวอย่างเช่น สถาปนิกที่สร้าง logical architecture แบบที่แสดงใน Figure 8-4 อาจยังไม่ได้ตัดสินใจว่า component เหล่านั้นทั้งหมดจะไปอยู่ใน monolithic architecture (หน่วย deployment เดียว) หรือจะถูก deploy เป็น service ต่าง ๆ (หน่วย deployment แยกกัน) และก็ยังไม่จำเป็นต้องตัดสินใจด้วยว่า architecture style แบบไหนจะเหมาะสม ที่สุด