Topic 6
Topic 6
โค้ด Ruby ใช้ร่วมจากโฟลเดอร์ en/ ของต้นฉบับ เพื่อให้สองภาษาผูกกับชุดทดสอบเดียวกัน
ภาพรวม
ทำไมหัวข้อนี้จึงสำคัญ
นี่คือจุดที่ผู้เรียนเริ่มออกแบบ object เล็ก ๆ ที่ทำงานร่วมกัน แทนที่จะเขียน functions แยก กันแบบโดด ๆ หัวข้อนี้จึงแนะนำทั้ง state ภายใน, validation, พฤติกรรมที่แชร์ผ่าน modules และการส่ง dependency เข้ามาผ่าน composition
สิ่งที่ผมอยากให้คุณทำได้เมื่อจบหัวข้อนี้
เมื่อจบหัวข้อนี้ คุณควรจะ:
จุดที่ผมใช้ดูความเข้าใจ
ผมอยากให้คุณอธิบายได้ว่าทำไม object จึงเป็นเจ้าของ state ของมันเอง และทำไม dependency อย่าง calculator จึงถูกรับเข้ามาจากภายนอก แทนที่จะสร้างไว้ข้างใน
โน้ตสั้น
ระบบ object ของ Ruby รองรับ class ขนาดเล็กมากที่ยังทำงานจริงจังได้ ผมอยากให้ผู้เรียน เห็นว่า class ไม่ได้มีเหตุผลเพียงเพราะมันสั้นหรือเล็ก แต่มีเหตุผลเพราะมันมีหน้าที่ มี state ของตัวเอง และมีขอบเขตการร่วมงานที่ชัด
หัวข้อนี้สำคัญเพราะมันเริ่มฝึกนิสัยใหญ่ 2 อย่าง:
จุดที่ Ruby ทำได้ดีในหัวข้อนี้:
จุดที่ต้องระวังในหัวข้อนี้:
คำถามชวนคิด:
ตัวอย่างแบบลงมือดู
Example 1: Wallet หรือยอดเงินในบัญชี
object ที่ถือยอดเงินเป็นตัวอย่างสอนที่ดี เพราะมันมี state จริง และมี invariants ที่ชัด
คำถามที่ผู้เรียนควรถาม:
Example 2: Checkout ที่รับ calculator เข้ามา
logic ของ checkout มักประกอบจาก pricing rules, discount engines, tax services หรือ promotional logic อยู่แล้ว จึงเป็นตัวอย่าง composition ที่เป็นธรรมชาติ
checkout = Checkout . new ( calculator : calculator ) checkout . final_total ( cart ) worked_examples.md ruby เหตุผลที่ตัวอย่างนี้มีประโยชน์: