จาก บทความที่แล้วเรื่อง CVA บอกว่าถ้าหา common-variable จาก context of use ไปเรื่อยๆ จะเจอดีไซน์ที่ดีได้โดยไม่ต้องพยายามท่องจำ Design Pattern

ทำให้ดูอีกตัวอย่างนึง

Requirement

  • ร้านกาแฟนางเงือก ขยายกิจการ ทำโปรแกรมคิดค่าชานม
  • ชานมเลือกใส่ของเพิ่มเป็น ไข่มุก 10 บาท, เฉาก๊วย 15 บาท
  • ราคาชานม คิดจาก ค่าชานม กับ ค่าของเพิ่มรวมๆกัน

Context of Use

โปรแกรมต้องการคิดราคาของชานม (ไม่ได้พูดถึงการชง สต็อกสินค้า ฯลฯ)

Common

ของเพิ่ม

  • ใส่เพิ่มเข้าไปใน ชานม ได้เหมือนกัน
  • มีราคาเหมือนกัน (เวลาคิดตังก็เอาราคาชา + ราคาของเพิ่มในชารวมๆกัน)
  • มอง context เดิมอีกที ทั้งชานม และ ของเพิ่ม มี ราคา เอาไปคิดเงินได้เหมือนกัน กลายเป็นสินค้า (Product)

Variable

  • ของเพิ่มมีหลายแบบ และราคาไม่เท่ากัน
ภาษาไฮโซเรียกว่า Decorator Pattern

ข้อสังเกต

  • MilkTea ไม่ได้แยกออกมาเป็นชาหลายแบบ เพราะเห็นๆอยู่ว่ามีแบบเดียว
  • เรียกว่า Product เพราะ context of use คือ การขายของ เลยไม่ได้เรียกว่า Drinks
  • Requirement จริง ไม่ได้แยกออกมาให้เห็นง่ายขนาดนี้ จงเน้นความเข้าใจปัญหามากกว่าการแก้ปัญหา
  • เมื่อเราเข้าใจปัญหา ดีไซน์และโค้ดที่เขียนออกมาก็จะเรียบง่าย