บทที่ 8 การออกแบบเชิงสถาปัตยกรรม
วัตถุประสงค์ • เพื่อทำควำมรู้จักกับรูปแบบเชิงสถำปัตยกรรม • เพือ่ ให้เข้ำใจกำรออกแบบเชิงสถำปัตยกรรม และกำรออกแบบเชิง ละเอียด • เพื่อให้เข้ำใจกำรเกำะกลุ่มกัน และกำรพึ่งพำกัน
บทนา ขั้นตอนกำรออกแบบซอฟต์แวร์ สถำปนิกซอฟต์แวร์ (Software Architect) จะต้องพิจำรณำลักษณะโครงสร้ำงของซอฟต์แวร์ ประกอบด้วย ส่วนประกอบ และ ควำมสัมพันธ์ระหว่ำงส่วนประกอบและคำนึงถึงรูปแบบเชิงสถำปัตยกรรมของ ซอฟต์แวร์ กำรออกแบบซอฟต์แวร์ แบ่งเป็น 2 ประเภท • กำรออกแบบเชิงสถำปัตยกรรม (Architectural Design) • กำรออกแบบเชิงละเอียด (Detailed Design)
การออกแบบเชิงสถาปัตยกรรม (Architectural Design) กำรออกแบบที่มองภำพรวมของซอฟต์แวร์ ซึ่งเกี่ยวข้องกับอุปกรณ์ ฮำร์ดแวร์ ซอฟต์แวร์ เครือข่ำยคอมพิวเตอร์ กำรออกแบบรำยงำน กำร ออกแบบส่วนต่อประสำนกับผู้ใช้ ฐำนข้อมูล และไฟล์ต่ำง ๆ
การออกแบบเชิงละเอียด (Detailed Design) กำรปรับโครงสร้ำงสถำปัตยกรรมให้ตรงกับควำมต้องกำรของผู้ใช้ กำรออกแบบ มอดูล กำรแบ่งมอดูลออกเป็นฟังก์ชันย่อย และกำรออกแบบเชิงโครงสร้ำง วัตถุประสงค์ของกำรออกแบบสถำปัตยกรรมโปรแกรม หรือ แผนภูมิโครงสร้ำง เพื่อ เป็นประโยชน์สำหรับนักเขียนโปรแกรมต่อไป
รูปแบบเชิงสถาปัตยกรรม กำรเลือกรูปแบบเชิงสถำปัตยกรรม (Architectural Style) ให้กับ ซอฟต์แวร์ มีหลำยรูปแบบ แตกต่ำงกันตำมลักษณะของโครงสร้ำง
การออกแบบเชิงสถาปัตยกรรมแบบ Pipe and Filters
Pipes Filter
Filter Filter
Filter
Filter
Filter
Filter
Filter
Filter
Pipe เป็นเสมือนท่อส่งข้อมูลนำเข้ำไปยังกระบวนกำรเปลี่ยนรูปข้อมูล Filter เหมือนตัวกรองข้อมูลจนได้ผลลัพธ์
Filter
การออกแบบเชิงสถาปัตยกรรมแบบ Call and Return Main Program Controller Subprogram Application Subprogram
Application Subprogram
Controller Subprogram Application Subprogram
Application Subprogram
Controller Subprogram Application Subprogram
กำรออกแบบที่มีลักษณะของโครงสร้ำงควบคุมแบบลำดับชั้นและบนลงล่ำง
Application Subprogram
การออกแบบเชิงสถาปัตยกรรมแบบ Client/Server เครื่องไคลเอนต์ที่อยู่บนเครื่องคอมพิวเตอร์เครื่องใดเครื่องหนึ่งส่งคำร้องขอ (Request) บริกำรไปยังเครื่องเซิร์ฟเวอร์ จำกนั้น เซิร์ฟเวอร์จะประมวลผลตำมควำมต้องกำรที่ได้รับ แล้วส่งผล (Replay ) ของบริกำรกลับไปยังเครื่องไคลเอนต์ที่ขอใช้บริกำร
การออกแบบเชิงสถาปัตยกรรมแบบ Client/Server กรณีมีเซิร์ฟเวอร์หลำยตัว Client A
การออกแบบเชิงสถาปัตยกรรมแบบ Model View Controller View 1
Controller 1
View 2
Controller 2
Model
เป็นกำรออกแบบที่แยกส่วนกำรทำงำนแต่ละส่วนให้เป็นอิสระต่อกัน คือ แบบจำลอง (Model) มุมมอง (View) ตัวควบคุม(Controller)
การออกแบบเชิงสถาปัตยกรรมแบบเลเยอร์ Java API OS API Kernel
จัดโครงสร้ำงระบบย่อยหรือส่วนประกอบต่ำง ๆ ในมุมมองแบบลำดับชั้น โดยแต่ละเลเยอร์ คือส่วนประกอบย่อยซึ่งจะทำงำนในแต่ละด้ำนของซอฟต์แวร์และสำมำรถทำงำนร่วมกับเลเยอร์ ด้ำนนอกได้
การออกแบบเชิงสถาปัตยกรรมแบบฐานข้อมูลเป็นศูนย์กลาง
Client 1
Client 2 DB
Client 3
กำรออกแบบที่มีฐำนข้อมูลเป็นศูนย์กลำง และผู้ใช้สำมำรถเข้ำถึงข้อมูลในฐำนข้อมูลได้โดยตรง
การออกแบบเชิงสถาปัตยกรรมแบบ Three Tier
Client 1
DB
Business Tier
Client 2
Client 3
กำรออกแบบที่มีลักษณะคล้ำยกันแบบฐำนข้อมูลเป็นศูนย์กลำง และสำมำรถ ปรับเปลี่ยนกำรออกแบบให้มีลักษณะเป็น n-tier ได้
การออกแบบเชิงสถาปัตยกรรม กำรออกแบบเชิงสถำปัตยกรรม (Architectural Design) มองภำพรวมของกำรออกแบบ ซอฟต์แวร์ เรียกอีกชื่อหนึ่งว่ำ “กำรออกแบบระดับสูง (High-Level Design)” คือ กำรกำหนด โครงสร้ำงของซอฟต์แวร์ในมุมมองระดับบน โดยแสดงให้เห็นถึงส่วนประกอบ คุณลักษณะ และ ควำมสัมพันธ์ของส่วนประกอบ ภำยใต้รูปแบบเชิงสถำปัตยกรรมในแบบต่ำง ๆ กำรออกแบบเชิง สถำปัตยกรรมเกิดจำกควำมต้องกำรที่ไม่เป็นฟังก์ชัน กำรออกแบบเชิงละเอียด คือกำรออกแบบ มอดูลที่เกิดจำกควำมต้องกำรเชิงฟังก์ชัน ควำมต้องกำรที่ไม่เป็นฟังก์ชัน
การออกแบบเชิงสถาปัตยกรรม ควำมสัมพันธ์ระหว่ำงควำมต้องกำร กำรออกแบบเชิงสถำปัตยกรรมและกำรออกแบบเชิงละเอียด Requirements
Architectural Design
R1
R2
R3
Detailed Design
M1
M2
M3
ตัวอย่างการออกแบบเชิงสถาปัตยกรรมของบ้าน
Customer Requirements Four bedrooms, three baths,
Architectural Design
...
การออกแบบเชิงละเอียด (Detailed Design) กำรออกแบบเชิงนำไปปฏิบัติ (Implementation Design) คือ กำรอธิบำยรำยละเอียดแต่ละ ส่วนประกอบของซอฟต์แวร์ เพื่อเป็นประโยชน์สำหรับกำรเขียนโปรแกรมให้มำกที่สุด • กำรแตกฟังก์ชันเป็นส่วนย่อย (Functional Decomposition) คือ กำรแบ่งมอดูลออกเป็น มอดูลย่อย ในปัจจุบัน นิยมใช้ในโปรแกรมประยุกต์บนเว็บ
การแตกฟังก์ชันของมอดูล 0.Main
1.Main
2.Course
3.Section
4. Registration
1.1 Add
1.1 Add
1.1 Add
1.2 Modify
1.2 Modify
1.2 Modify
4.1 Register
1.3 Delete
1.3 Delete
1.3 Delete
4.2 Drop
การแตกฟังก์ชันของมอดูลอีกรูปแบบ 0.Main
1. Student
2.Course
3.Section
4. Registration
5.Database
5.1 Add
5.2 Modify
5.3 Delete
การเกาะกลุ่มกัน กำรเกำะกลุ่มกัน ( Cohesion) คือ กำรเกำะกลุ่มกันระหว่ำงมอดูล วัตถุ หรือ ส่วนประกอบ ต่ำง ๆ โดยคำนึงถึงดีกรีของควำมสัมพันธ์ (Degree of Relatedness) ภำยในมอดูล วัตถุ หรือ ส่วนประกอบนั้น ๆ Functional Cohesion
Communicational Cohesion Procedural Cohesion Temporal Cohesion
Levels of Cohesion
Sequential Cohesion
Higher the Better
Logical Cohesion Coincidental Cohesion
การพึ่งพากัน (Coupling) กำรติดต่อระหว่ำงข้อมูลมอดูล โดยมอดูลจะส่งผ่ำนพำรำมิเตอร์ไปยังมอดูลอื่น เรียกกว่ำ Function Call เมื่องำนสิ้นสุด มอดูลที่ถูกเรียกจะส่งค่ำกลับคืนมำ เรียกกว่ำ Function Return M1 M11 content coupling with M21
M11
M12
M21
M22
คาถามท้ายบท • รูปแบบเชิงสถำปัตยกรรมคืออะไร และมีควำมสำคัญอย่ำงไร • กำรออกแบบเชิงสถำปัตยกรรมแบบ MVC คืออะไร และมีควำมสำคัญ อย่ำงไร • กำรออกแบบมอดูลที่ดีควรมีลักษณะอย่ำงไร พร้อมทั้งยกตัวอย่ำง ประกอบและมีประโยชน์ต่อกำรพัฒนำซอฟต์แวร์อย่ำงไร