Clean Architecture คือ สถาปัตยกรรมการเขียนโปรแกรมที่ช่วยให้การพัฒนาซอฟต์แวร์สามารถทำได้อย่างมีระบบ มีการแบ่งสัดส่วนของโค้ดที่ชัดเจน ช่วยให้โค้ดของเรามีความยืดหยุ่น สามารถนำไปปรับใช้หรือแก้ไขได้ง่าย ไม่ว่าจะผ่านระยะเวลานานเพียงใด หรือจะมีการเปลี่ยนแปลงความต้องการจากผู้ใช้งานมากน้อยเพียงใดก็ตาม
แนวคิดนี้ถูกนำมาพูดคุยเป็นครั้งแรกโดย Robert C. Martin (ที่เรารู้จักกันในนาม Uncle Bob) ซึ่งเป็นหนึ่งในผู้เชี่ยวชาญทางด้านซอฟต์แวร์ที่มีชื่อเสียง แนวคิดของ Clean Architecture นั้นเข้าใจง่ายมาก ๆ แม้กระทั่งเด็กวัย 8 ขวบก็สามารถเข้าใจได้ เราลองมาแบ่งพิจารณาเป็นส่วน ๆ กันดูค่ะ
ลองนึกภาพว่าการสร้างซอฟต์แวร์เหมือนกับการสร้างตึก หากเราไม่มีโครงสร้างที่แข็งแรง ตึกนั้นก็อาจจะพังทลายลงได้ง่ายๆ เมื่อเจอกับสภาพผันผวน เช่น งานเทศกาลที่มีคนมากมายเข้ามาใช้งาน หรือเมื่อเวลาผ่านไปนานเราอาจจะต้องการเพิ่มชั้นใหม่ๆ เข้าไปในตึก ถ้าหากโครงสร้างไม่ดีตั้งแต่แรก การเพิ่มชั้นก็อาจจะทำได้ยากมาก
Clean Architecture มีการแบ่งส่วนของโค้ดออกเป็นหลายชั้น ในแต่ละชั้นนั้นก็จะทำหน้าที่แตกต่างกันไป ทำให้เราสามารถจัดการกับโค้ดได้ง่ายขึ้น เช่นเดียวกับการที่เรากำหนดให้ห้องนอนอยู่ชั้นหนึ่ง ห้องครัวอยู่ชั้นที่สอง และห้องเล่นเกมอยู่ชั้นสาม เมื่อเราต้องการปรับแต่งหรือซ่อมแซมในส่วนใดส่วนหนึ่ง เราก็ไม่จำเป็นต้องยุ่งกับส่วนอื่น ๆ
ลองนึกภาพว่าเรากำลังเขียนโปรแกรมจัดการกับการขายหนังสือ ตามหลักการ Clean Architecture เราจะแบ่งโค้ดออกเป็นส่วนที่จัดการกับการแสดงผล (UI), ส่วนที่จัดการกับกฎโดยรวมของระบบ (Business Rules), และส่วนที่จัดกับการเก็บข้อมูล (Database) ดังนี้:
# Business Rules
class Book:
def __init__(self, name, price):
self.name = name
self.price = price
def apply_discount(self, discount):
self.price -= self.price * discount
# Database
class BookRepository:
def __init__(self):
self.books = []
def add_book(self, book):
self.books.append(book)
def get_books(self):
return self.books
# UI
class BookstoreUI:
def display_books(self, books):
for book in books:
print(f'หนังสือ: {book.name}, ราคา: {book.price} บาท')
# โค้ดหลัก
book_repo = BookRepository()
book_repo.add_book(Book('Harry Potter', 400))
book_repo.add_book(Book('Lord of the Rings', 500))
books = book_repo.get_books()
for book in books:
book.apply_discount(0.1) # ให้ส่วนลด 10%
ui = BookstoreUI()
ui.display_books(books)
จากโค้ดตัวอย่างด้านบน คุณสามารถเห็นได้ว่าเราแบ่งส่วนการทำงานออกเป็นอีกส่วนได้อย่างชัดเจน การจัดการกับข้อมูลหนังสือจะทำในส่วนของ `Book` และ `BookRepository` การจัดการกับวิธีการแสดงหนังสือที่ขายอยู่อย่างไรบนหน้าจอนั้นจะทำในส่วน `BookstoreUI` ซึ่งถ้าหากเราต้องการเปลี่ยนแปลงวิธีการแสดงผล เราก็ไม่จำเป็นต้องไปแก้โค้ดในส่วนอื่น ๆ สามารถเน้นไปที่ `BookstoreUI` ได้เลย
Clean Architecture จึงเป็นการออกแบบที่มีความสำคัญมากในการพัฒนาซอฟต์แวร์ เพราะช่วยให้การทำงานสะอาด และสามารถตอบสนองต่อความต้องการที่เปลี่ยนแปลงได้อย่างง่ายดาย นั่นเองค่ะ
สำหรับผู้ที่สนใจศึกษาเพิ่มเติมผ่านหลักสูตรที่สอนการเขียนโปรแกรมอย่างเชี่ยวชาญ อย่าลืมติดตามหลักสูตรอัพเดทใหม่ ๆ และทันสมัยจาก EPT ที่พร้อมจะเดินทางไปพร้อมกับคุณในการเป็นนักพัฒนาซอฟต์แวร์มืออาชีพนะคะ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: clean_architecture software_development programming robert_c._martin flexible_code software_design business_rules database_management ui_design code_example software_architecture programming_concepts development_principles software_engineering
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com