𝗟𝗟𝗗 𝗗𝗲𝘀𝗶𝗴𝗻 𝗣𝗿𝗼𝗰𝗲𝘀𝘀 (𝗙𝗿𝗼𝗺 𝗥𝗲𝗾𝘂𝗶𝗿𝗲𝗺𝗲𝗻𝘁𝘀 𝘁𝗼 𝗖𝗼𝗱𝗲)
Low Level Design ไม่ใช่เรื่องของการเขียนโค้ดในทันที แต่เป็นเรื่องของการปฏิบัติตามกระบวนการที่มีโครงสร้างชัดเจน
ทำตามขั้นตอนเหล่านี้เพื่อเปลี่ยนจากโจทย์ปัญหาไปสู่โค้ดที่ใช้งานได้จริง
- ทำความเข้าใจความต้องการ (Requirements) อย่าเพิ่งรีบกระโดดไปที่การสร้างคลาส (Classes) ก่อนอื่นต้องหาให้ได้ว่าระบบต้องทำอะไรได้บ้าง
- ต้องการฟีเจอร์อะไรบ้าง?
- ต้องรองรับการทำงาน (Actions) อะไรบ้าง?
- อาจมีการเปลี่ยนแปลงอะไรเกิดขึ้นในภายหลังบ้าง?
- ระบุคำนามเพื่อหาคลาส (Classes) มองหาคำนามในความต้องการของคุณ คำนามเหล่านั้นจะกลายเป็นคลาสของคุณ ตัวอย่าง: โปรแกรมแก้ไขเอกสาร (Document Editor)
- คำนาม: Document, Text, Image, Storage, Editor
- คลาส: Document, TextElement, ImageElement, Storage, DocumentEditor
ตัวอย่าง: ลานจอดรถ (Parking Lot)
- คำนาม: ParkingLot, Floor, Slot, Vehicle, Ticket
- คลาส: ParkingLot, Floor, Slot, Vehicle, Ticket
- ใช้ IS-A สำหรับการสืบทอด (Inheritance) ถามตัวเองว่า: "ลูกเป็นประเภทหนึ่งของพ่อแม่หรือไม่?"
- TextElement IS-A DocumentElement
- Car IS-A Vehicle
- Dog IS-A Animal ถ้าคำตอบคือใช่ ให้ใช้การสืบทอด (Inheritance)
- ใช้ HAS-A สำหรับการประกอบกัน (Composition) ถามตัวเองว่า: "วัตถุหนึ่งประกอบด้วยอีกวัตถุหนึ่งหรือไม่?"
- Document HAS-A ชุดขององค์ประกอบ (elements)
- ParkingLot HAS-A ชุดของชั้น (floors)
- Car HAS-A เครื่องยนต์ (engine) ใช้ Composition เพื่อเชื่อมโยงวัตถุเหล่านี้เข้าด้วยกัน
- ระบุคำกริยาเพื่อหาเมธอด (Methods) มองหาการกระทำในความต้องการ คำกริยาเหล่านั้นจะกลายเป็นเมธอดของคุณ
- Add text กลายเป็น
addText() - Save document กลายเป็น
save() - Park vehicle กลายเป็น
parkVehicle()
- วางแผนเพื่อรองรับการเปลี่ยนแปลงด้วยอินเทอร์เฟซ (Interfaces) คิดถึงการอัปเดตในอนาคต หากคุณบันทึกเอกสาร คุณอาจใช้ไฟล์ (File), ฐานข้อมูล (Database) หรือคลาวด์ (Cloud)
- สร้างอินเทอร์เฟซที่ชื่อว่า
Persistence - สร้างการนำไปใช้งาน (implementations) เช่น
FileStorageหรือDBStorageวิธีนี้จะช่วยให้คุณสามารถเพิ่มCloudStorageได้ในภายหลังโดยไม่ต้องแก้ไขโค้ดเดิมที่มีอยู่
- วาด UML และเขียนโค้ด เมื่อคุณมีคลาส, การสืบทอด, การประกอบกัน และเมธอดแล้ว ให้วาดแผนภาพ UML ซึ่งจะทำหน้าที่เป็นพิมพ์เขียว (blueprint) ของคุณ สุดท้ายจึงเปลี่ยนพิมพ์เขียวนั้นให้เป็นโค้ดที่สะอาด (clean code)
สรุปขั้นตอน:
- ความต้องการ (Requirements)
- คำนามสู่คลาส (Nouns to Classes)
- IS-A สู่การสืบทอด (Inheritance)
- HAS-A สู่การประกอบกัน (Composition)
- คำกริยาสู่เมธอด (Methods)
- ความหลากหลายสู่อินเทอร์เฟซ (Interfaces)
- แผนภาพ UML (UML Diagram)
- โค้ดสุดท้าย (Final Code)
ที่มา: https://dev.to/roshan_singh_dd54d52bbaa7/lld-design-process-from-requirements-to-code-594m