Kata 1: Primitive Obsession Breakdown
- สำรวจ Legacy Codebase ในคลาส
UserProfileและOrderRequestแล้วชี้จุดที่เป็น Primitive Obsession
สัปดาห์ที่ 3–5 · Day 15–35 · 21 วัน เพื่อแปลงทฤษฎีให้เป็นทักษะการเขียนโค้ดที่ปลอดภัย
Day 15–21
เป้าหมาย: สกัด Primitive Types ดิบ (String, int, double) ในคลาสยักษ์ใหญ่ให้กลายเป็น Domain Primitives ที่การันตี Invariants ตั้งแต่วินาทีที่สร้างขึ้น
UserProfile และ OrderRequest แล้วชี้จุดที่เป็น Primitive ObsessionEmailAddress, PhoneNumber, Money และ QuantityDay 22–28
เป้าหมาย: รื้อคลาสที่มีแต่ Getters/Setters ให้กลายเป็น Secure Aggregate Root ที่ควบคุม State Integrity และสยบ Escaping References
OrderAggregateaddItem(), cancelOrder(), applyDiscount()Collections.unmodifiableList(...) หรือ Read-Only Views.clear() หรือดัดแปลงข้อมูลภายในโดยข้ามการตรวจDay 29–32
เป้าหมาย: สยบ if-else เช็กสถานะที่ซ้อนกันหลายชั้น ด้วย Entity Relay ที่ส่งไม้ต่อข้ามคลาส
if-else ของสถานะ DRAFT, PAID, SHIPPED, CANCELLEDDraftOrder, PaidOrder, ShippedOrderPaidOrder pay(PaymentReceipt receipt) ให้เปลี่ยนสถานะได้เฉพาะขั้นตอนที่ถูกต้องDay 33–35
เป้าหมาย: ปกป้องข้อมูลความลับ (Password, Sensitive Tokens) ไม่ให้รั่วลง Log และทำลายทิ้งในหน่วยความจำทันทีหลังใช้งาน
Password หรือ SecretToken โดยใช้ char[] แทน StringtoString() ให้คืนเฉพาะค่าที่ปิดบัง (********) เพื่อกัน Log LeakageArrays.fill(chars, (char) 0) ทันทีหลังใช้งานเสร็จ