ชื่อที่ใช้สั่ง AI ได้ในคำเดียว
แพทเทิร์นไม่ใช่ท่าโชว์ มันคือรูปทรงของไฟล์ที่คนเจอปัญหาเดียวกันมาแล้วหลายพันครั้ง แล้วตั้งชื่อให้ พอคุณพิมพ์ว่า “ทำส่วนลดเป็น Strategy” AI รู้ทันทีว่าต้องมีแบบกลางหนึ่งอัน แคมเปญละไฟล์ และจุดเลือกที่เดียว ถ้าไม่พูดชื่อ AI จะเติมเงื่อนไขอีกหนึ่งก้อนในไฟล์เดิม ทุกครั้งที่มีแคมเปญใหม่
ร้านคอร์สออนไลน์ร้านเดิมจาก Clean Architecture ขายบนเว็บและ LINE แปดกระดาน แปดงานจริงที่คุณสั่ง AI ซ้ายใช้แพทเทิร์น ขวาเขียนแบบที่ AI เขียนเมื่อไม่มีใครบอก กดถัดไปแล้วนับว่าฝั่งไหนต้องเปิดกี่ไฟล์ ทดสอบซ้ำกี่เรื่อง และอะไรพัง ทุกขั้นมีข้อความที่คุณส่งให้ AI ได้เลย บทจะถูกนับว่าเรียนจบเมื่อคุณไปถึงขั้นสุดท้ายของกระดาน

ร้านคอร์สของคุณมีส่วนลด Gold กับโค้ดคูปองอยู่แล้ว เดือนนี้คุณอยากเพิ่มแคมเปญซื้อ 3 คอร์สลด 20% เดือนหน้าเพิ่มจองก่อนเปิดลด 15% กติกาของร้านคือใช้ได้ทีละอย่าง และเลือกอันที่ลดมากที่สุด
เพิ่มแคมเปญส่วนลดใหม่ทุกเดือน แล้วเว็บกับ LINE เริ่มลดไม่เท่ากัน
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ซ้าย มีแคมเปญ Gold กับคูปอง ไฟล์ละตัว และส่วนคิดราคาที่เลือกอันที่ลดมากสุด ขวา มีเงื่อนไข ถ้า Gold ลด 10% ไม่งั้นถ้ามีคูปอง ลดตามโค้ด อยู่ในหน้าชำระเงิน และอีกชุดเหมือนกันในบอท LINE
ซ้าย AI เพิ่มไฟล์แคมเปญใหม่ แล้วเพิ่มบรรทัดเดียวในรายชื่อแคมเปญ ทดสอบซ้ำ 2 ตัว ขวา AI เพิ่มเงื่อนไขซื้อ 3 คอร์ส ทั้งในเว็บและใน LINE แล้วทดสอบซ้ำ 8 ตัว รอบนี้ยังไม่พัง
ซ้าย AI เพิ่มไฟล์แคมเปญอีกไฟล์ กับอีกบรรทัดในรายชื่อ ขวา AI ใส่เงื่อนไขจองก่อนเปิดไว้บนสุดในเว็บ แต่ต่อท้ายใน LINE สมาชิก Gold ซื้อ 15,000 ผ่าน LINE เลยไปไม่ถึงบรรทัดนั้น ได้ลด 500 แทน 2,250
ซ้าย AI แก้ส่วนที่เลือกแคมเปญ ไฟล์เดียว ไฟล์แคมเปญไม่ถูกเปิด ขวา AI ย้ายเงื่อนไขคูปองขึ้นบนสุดทั้งสองไฟล์ ในเว็บ เงื่อนไขเดิมของจองก่อนเปิดกลายเป็นชุดใหม่ แล้วเขียนทับส่วนลดของคูปอง
ถ้าวิธีทำมีหลายแบบ และต้องเลือกตอนใช้งาน ให้แต่ละแบบเป็นไฟล์ของตัวเองที่มีรูปเดียวกัน แล้วให้การเลือกอยู่ที่เดียว ลำดับของเงื่อนไขไม่ควรเป็นกติกาของร้าน
ถามก่อนรับ diffกติกาว่าจะใช้แบบไหน อยู่ที่เดียว หรือซ่อนอยู่ในลำดับของเงื่อนไขหลายไฟล์
Strategy (Gamma, Helm, Johnson, Vlissides, Design Patterns 1994): define a family of algorithms, encapsulate each one, and make them interchangeable; the algorithm varies independently from the clients that use it
ทุกครั้งที่ลูกค้าจ่ายเงิน ร้านส่งใบเสร็จ ส่ง LINE และเปิดสิทธิ์เข้าเรียน ตอนนี้คุณอยากเพิ่มแต้มสะสม อยากเห็นสถิติยอดขาย และอยากให้ข้อความ LINE มีปุ่ม บนฝั่งขวา ทุกงานเริ่มที่การเปิดไฟล์จ่ายเงิน
หลังจ่ายเงินร้านต้องทำอีกหลายอย่าง พอข้อความ LINE ส่งไม่ผ่าน ลูกค้าจ่ายแล้วเข้าเรียนไม่ได้
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ซ้าย ส่วนจ่ายเงินตัดเงินแล้วประกาศว่าจ่ายแล้ว ส่วนใบเสร็จ ข้อความ LINE และเปิดสิทธิ์เข้าเรียน อยู่ไฟล์ละตัว และลงชื่อรอเหตุการณ์นั้นเอง ขวา ไฟล์จ่ายเงินตัดเงิน ส่งใบเสร็จ ส่ง LINE และเปิดสิทธิ์ เรียงกันในที่เดียว
ซ้าย AI เพิ่มไฟล์แต้มสะสม กับหนึ่งบรรทัดในรายชื่อคนรอ ทดสอบซ้ำ 2 ตัว ขวา AI เพิ่มแต้มสะสมต่อท้ายในไฟล์จ่ายเงิน แล้วต้องทดสอบซ้ำทั้ง 5 เรื่อง รวมการตัดเงินด้วย รอบนี้ยังไม่พัง
ซ้าย AI เพิ่มไฟล์สถิติยอดขาย ส่งช้าแค่ไหน ส่วนจ่ายเงินก็ตอบลูกค้าไปแล้ว ขวา การส่งสถิติรอ 2 ถึง 4 วินาที การจ่ายเงินทั้งก้อนใช้ 9 วินาที หน้าชำระเงินหมดเวลาที่ 8 วินาที ลูกค้ากดจ่ายอีกรอบ แล้วถูกตัดเงินสองครั้ง
ซ้าย AI แก้ไฟล์ข้อความ LINE แล้ว LINE ไม่รับข้อความ เพราะรูปแบบผิด พังแค่ข้อความ LINE บันทึกบอกชื่อ ลูกค้ายังเข้าเรียนได้ ขวา ข้อความ LINE ล้มกลางไฟล์จ่ายเงิน การเปิดสิทธิ์ที่อยู่บรรทัดถัดไปไม่ถูกทำ ลูกค้าจ่ายแล้วแต่เข้าเรียนไม่ได้
ของที่ต้องเกิดหลังเหตุการณ์หนึ่ง ให้มาลงชื่อรอเหตุการณ์นั้นเอง ตัวที่ประกาศไม่ต้องรู้ว่าใครรอ ตัวไหนช้าหรือล้ม ก็พังแค่ตัวมัน และต้องมีบันทึกบอกชื่อ
ถามก่อนรับ diffถ้าบรรทัดที่เพิ่มนี้ล้ม หรือช้า 5 วินาที การจ่ายเงินยังผ่านไหม
Observer (Gamma, Helm, Johnson, Vlissides 1994): define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified
วิดีโอบทเรียนทั้งหมดอยู่บน Vimeo คุณอยากย้ายไป Bunny เพราะถูกกว่าครึ่ง ก่อนย้ายอยากได้หน้าคลิปตัวอย่างฟรีอีกหน้า บนฝั่งขวา AI ต้องหาเองว่าโค้ดตรงไหนบ้างที่รู้จัก Vimeo
ย้ายวิดีโอบทเรียนจาก Vimeo ไป Bunny แล้วไม่มีใครเรียนจบ 100%
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ซ้าย หน้าเรียน หน้าอัปโหลด และส่วนบันทึกความคืบหน้า พูดกับคลิปด้วยคำของเรา ส่วนตัวแปลง Vimeo แปลงที่อยู่คลิป ลิงก์ฝัง และเปอร์เซ็นต์ให้ ขวา สามหน้านั้นถือลิงก์ฝัง รหัสคลิป และเปอร์เซ็นต์แบบของ Vimeo เอง
ซ้าย AI เพิ่มหน้าคลิปตัวอย่างที่ขอลิงก์ฝังผ่านคำของเรา ขวา AI เพิ่มหน้าเดียวกัน แต่ก๊อปลิงก์ฝังแบบของ Vimeo มาจากหน้าเรียน รอบนี้ยังไม่พัง ขวามีไฟล์ที่รู้จัก Vimeo เพิ่มเป็น 4 ไฟล์
ซ้าย AI เพิ่มตัวแปลง Bunny แล้วแก้บรรทัดเดียวที่จุดต่อสาย ขวา AI แก้ลิงก์ฝัง เหตุการณ์เครื่องเล่น การอัปโหลด และรหัสคลิปในสองไฟล์ แต่ไม่มีใครเปิดส่วนบันทึกความคืบหน้า มันอ่านเปอร์เซ็นต์ที่ Bunny ไม่ส่ง เลยบันทึกค่าว่าง และไม่มีใครเรียนจบ 100%
ซ้าย ไม่ต้องแตะไฟล์ไหน ตัวแปลง Vimeo ไม่มีใครใช้แล้ว ลบได้ทั้งไฟล์ ขวา ก็ไม่ได้แตะไฟล์ไหน แต่หน้าคลิปตัวอย่างยังเรียก Vimeo อยู่ คลิปตัวอย่างขึ้นจอดำ ไม่มีข้อความผิดพลาด
อย่าให้ชื่อข้อมูลของผู้ให้บริการกระจายไปทั้งแอป ตั้งคำของเราเอง แล้วให้ตัวแปลงหนึ่งไฟล์ต่อผู้ให้บริการ แปลงรหัส หน่วย และเหตุการณ์ให้เข้ารูปนั้น
ถามก่อนรับ diffdiff นี้มีชื่อข้อมูลของผู้ให้บริการ อยู่นอกไฟล์ตัวแปลงไหม
Adapter (Gamma, Helm, Johnson, Vlissides 1994): convert the interface of a class into another interface clients expect; adapter lets classes work together that couldn't otherwise because of incompatible interfaces
หน้าคอร์ส บอท LINE และหน้าชำระเงิน อ่านข้อมูลคอร์สจากฐานข้อมูล คุณอยากรู้ว่าการอ่านไหนช้า อยากให้ลองใหม่ตอนฐานข้อมูลหลุดช่วงอัปเดตระบบ แล้วอยากจำผลไว้ 60 วินาทีให้หน้าคอร์สกับ LINE บนฝั่งขวา AI เปิดไฟล์คนเรียกทีละไฟล์
ขอบันทึกเวลา ลองใหม่ และจำผล ให้การอ่านคอร์ส แล้วหน้าชำระเงินสร้างออเดอร์ซ้ำ
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ซ้าย คนเรียกทั้งสามรับตัวอ่านคอร์สมาจากจุดต่อสาย และไม่รู้ว่ามันถูกห่อกี่ชั้น ขวา คนเรียกทั้งสามเรียกไฟล์อ่านฐานข้อมูลตรง ๆ
ซ้าย AI เพิ่มตัวห่อบันทึกเวลา กับหนึ่งบรรทัดที่จุดต่อสาย ทดสอบซ้ำ 2 ตัว ขวา AI เพิ่มการบันทึกในทั้งสามไฟล์ ไฟล์ละรูปแบบ ทดสอบซ้ำ 6 ตัว รอบนี้ยังไม่พัง
ซ้าย AI เพิ่มตัวห่อลองใหม่ ที่ห่อแค่การอ่าน ขวา AI เพิ่มลองใหม่ 3 ครั้งในทั้งสามไฟล์ ในหน้าชำระเงิน ลูปห่อการสร้างออเดอร์เข้าไปด้วย ส่งไปจ่ายเงินพังหนึ่งครั้ง ก็ได้ออเดอร์ใบที่สอง
ซ้าย AI เพิ่มตัวห่อจำผล แล้วจุดต่อสายให้หน้าคอร์สกับ LINE อ่านผ่านมัน ส่วนหน้าชำระเงินอ่านราคาสด ขวา AI เพิ่มการจำผลในสองไฟล์ ชุดในบอท LINE ลืมเช็กอายุ ราคาเก่าค้างอยู่จนกว่าจะเปิดระบบใหม่
อยากเพิ่มบันทึกเวลา ลองใหม่ หรือจำผล ให้ของที่มีอยู่ ให้เขียนตัวห่อที่มีรูปเดียวกับของเดิม แล้วต่อมันที่จุดต่อสาย ทั้งของเดิมและคนเรียกไม่ต้องถูกเปิด
ถามก่อนรับ diffโค้ดลองใหม่หรือจำผลใน diff นี้ ถูกเขียนซ้ำในกี่ไฟล์ และแต่ละชุดห่ออะไรเข้าไปบ้าง
Decorator (Gamma, Helm, Johnson, Vlissides 1994): attach additional responsibilities to an object dynamically; decorators provide a flexible alternative to subclassing for extending functionality
ร้านคอร์สออกใบเสร็จให้ลูกค้าทั่วไป และออกใบกำกับภาษีให้ลูกค้าบริษัท ใบเสร็จออกได้สามทาง คือหน้าดาวน์โหลด อีเมลหลังจ่าย และบอท LINE เดือนนี้คุณมีงานสามข้อ ทุกข้อแตะคำถามเดียว ว่าใครได้เอกสารแบบไหน
ลูกค้าบริษัทต้องได้ใบกำกับภาษีแบบ e-Tax แต่ใบเสร็จที่ส่งทาง LINE ยังเป็น PDF แบบเดิม
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ซ้าย จุดเลือกแบบเอกสารดูข้อมูลลูกค้าแล้วตัดสิน ส่วนหน้าดาวน์โหลด อีเมล และบอท LINE แค่ขอเอกสาร ขวา ทั้งสามไฟล์มีเงื่อนไขของตัวเอง ว่าถ้ามีเลขผู้เสียภาษี สร้างใบกำกับภาษี ไม่งั้นสร้างใบเสร็จ
ซ้าย AI เพิ่มไฟล์ใบเสร็จภาษาอังกฤษ แล้วแก้จุดเลือกหนึ่งบรรทัด ขวา AI เพิ่มไฟล์เดียวกัน แล้วต้องแก้เงื่อนไขอีกสามไฟล์ ทดสอบซ้ำ 7 ตัว รอบนี้ AI หาเจอครบ
ซ้าย AI เพิ่มไฟล์ใบกำกับภาษีแบบ e-Tax แล้วแก้จุดเลือกอีกหนึ่งบรรทัด ขวา AI ค้นคำว่าเลขผู้เสียภาษี แล้วแก้หน้าดาวน์โหลดกับอีเมล แต่บอท LINE เช็กจากชื่อบริษัท เลยไม่โผล่ในผลค้น บริษัทที่ซื้อผ่าน LINE ยังได้ PDF แบบเดิม
ซ้าย AI เพิ่มไฟล์ปุ่มส่งซ้ำ ที่ขอเอกสารจากจุดเลือก แล้วได้ภาษาอังกฤษกับ e-Tax ทันที ขวา ไฟล์ใหม่มีเงื่อนไขชุดที่สี่ ที่ AI เขียนจากความจำ ไม่มีภาษาอังกฤษ และไม่มี e-Tax
ให้มีที่เดียวที่ตัดสินว่าจะสร้างของแบบไหน คนขอได้ของไปใช้ ไม่ต้องรู้ว่ามันเป็นแบบไหน
ถามก่อนรับ diffdiff นี้มีการเลือกว่าจะสร้างของแบบไหน อยู่นอกจุดเลือกหรือเปล่า
Factory Method (Gamma, Helm, Johnson, Vlissides 1994): define an interface for creating an object, but let subclasses decide which class to instantiate — บนกระดานนี้เป็นรูปที่เจอบ่อยที่สุด คือฟังก์ชันเดียวที่เลือกว่าจะสร้างแบบไหน
ร้านขายคอร์สบนเว็บและบอท LINE การซื้อหนึ่งครั้งมีห้าขั้น คือคิดราคา ตัดเงิน เปิดคอร์ส ส่งอีเมล และแจ้งทาง LINE สัปดาห์นี้คุณอยากเพิ่มคูปอง แล้วมีลูกค้าแจ้งมาจากเว็บว่าคอร์สเต็ม แต่โดนตัดเงิน
ลูกค้าจ่ายผ่าน LINE แล้วไม่ได้คอร์ส เพราะแก้ขั้นตอนซื้อแค่ในเว็บ
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ซ้าย ทางเข้าของการซื้อทำห้าขั้นตามลำดับเดียว เว็บกับบอทแค่ส่งคำสั่งซื้อเข้ามา ขวา หน้าเว็บทำ คิดราคา ตัดเงิน เปิดคอร์ส อีเมล แล้วแจ้ง LINE ส่วนบอทแจ้ง LINE ก่อน แล้วค่อยเปิดคอร์ส บอทเลยบอกลูกค้าว่าซื้อสำเร็จ ก่อนที่จะได้คอร์ส
ซ้าย AI แก้ส่วนคิดราคาให้รับคูปอง แล้วแก้ทางเข้าให้ส่งคูปองต่อ แตะ 2 ไฟล์ ขวา AI แก้ส่วนคิดราคา แล้วต้องแก้ทั้งหน้าเว็บและบอท แตะ 3 ไฟล์ ทดสอบซ้ำ 5 ตัว รอบนี้ยังไม่พัง
ซ้าย AI เพิ่มการคืนเงินเมื่อเปิดคอร์สไม่สำเร็จ ที่ทางเข้าที่เดียว ทุกช่องทางได้ทันที ขวา AI เพิ่มการคืนเงินในหน้าเว็บ ตามที่ลูกค้าแจ้ง ส่วนบอทยังไม่มี ลูกค้า LINE จ่ายแล้ว ได้ข้อความว่าซื้อสำเร็จ แต่ไม่ได้คอร์ส
ซ้าย AI เพิ่มไฟล์ช่องทาง Messenger ที่ส่งคำสั่งซื้อเข้าทางเข้าเดียว บรรทัดเดียว ได้คูปองและการคืนเงินครบ ขวา AI ก๊อปลำดับจากบอท LINE มาเป็นช่องทางใหม่ และก๊อปจุดที่ไม่มีคืนเงินมาด้วย
งานที่ต้องเรียกหลายส่วนตามลำดับ ให้มีทางเข้าเดียวที่คนเรียกใช้ ลำดับ การคืนเงิน และขั้นที่ต้องทำทุกครั้ง อยู่หลังทางเข้านั้นที่เดียว
ถามก่อนรับ diffไฟล์ช่องทางนี้เรียกส่วนข้างหลังเองมากกว่าหนึ่งส่วนหรือเปล่า ถ้าใช่ ลำดับตรงกับช่องทางอื่นไหม
Facade (Gamma, Helm, Johnson, Vlissides 1994): provide a unified interface to a set of interfaces in a subsystem; Facade defines a higher-level interface that makes the subsystem easier to use
คุณใช้หน้าหลังบ้านทุกวัน กดคืนเงิน ต่ออายุคอร์ส และย้ายนักเรียนไปรุ่นถัดไป ฝ่ายบัญชีขอดูว่าใครกดคืนเงินเมื่อไร แล้ววันศุกร์คุณกดย้ายนักเรียน 30 คนไปผิดรุ่น
กดย้ายนักเรียนผิดรุ่น 30 คน แต่ไม่มีบันทึกว่าเดิมอยู่รุ่นไหน
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ซ้าย ปุ่มทั้งสามสร้างคำสั่ง เช่นคำสั่งย้ายรุ่นที่มีชื่อนักเรียน รุ่นเดิม และรุ่นใหม่ แล้วส่งให้คนรันคำสั่ง ขวา ปุ่มทั้งสามสั่งระบบจ่ายเงิน หรือแก้ฐานข้อมูลตรง ๆ จากไฟล์ของตัวเอง
ซ้าย AI แก้คนรันคำสั่งบรรทัดเดียว ทุกคำสั่งถูกบันทึกพร้อมข้อมูลของมัน รวมปุ่มที่ยังไม่ได้สร้าง ขวา AI เติมบันทึกทีละปุ่ม สามไฟล์ ทดสอบซ้ำ 6 ตัว รอบนี้ยังไม่พัง
ซ้าย AI แก้คนรันคำสั่งให้ต่อคิว แล้วลองใหม่ด้วยรหัสคำสั่งเดิม ระบบจ่ายเงินเห็นรหัสซ้ำเลยไม่คืนซ้ำ ขวา AI เขียนลองใหม่ 3 ครั้งในปุ่มคืนเงิน รอบแรกหมดเวลา แต่เงินคืนไปแล้ว คำสั่งคืนเงินเลยถูกส่งซ้ำ ลูกค้าได้เงินคืนสองรอบ
ซ้าย AI เพิ่มวิธีย้อนในคำสั่งย้ายรุ่น คำสั่งจำรุ่นเดิมไว้แล้ว เลยย้ายกลับครบ 30 คน ขวา บันทึกบอกแค่รุ่นปลายทาง AI เขียนปุ่มย้อนที่ย้ายทุกคนกลับไปรุ่นก่อนหน้า ผิด 12 คน ที่มาจากรุ่นอื่น
ให้การกดปุ่มในหน้าหลังบ้านเป็นของชิ้นหนึ่ง ที่มีชื่อ มีข้อมูล และมีคนรันคนเดียว พอมันเป็นของ มันถูกบันทึก ต่อคิว ลองใหม่ และย้อนได้ ที่คนรันที่เดียว
ถามก่อนรับ diffปุ่มใหม่นี้ลงมือเองตรง ๆ หรือส่งคำสั่งผ่านคนรันเดียวกับปุ่มอื่น ถ้ากดผิด จะย้อนจากข้อมูลอะไร
Command (Gamma, Helm, Johnson, Vlissides 1994): encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations
ทุกสิ้นเดือนร้านคอร์สจ่ายเงินให้ผู้สอน ยอดต้องออกเป็นไฟล์ CSV ให้ฝ่ายบัญชี และลง Google Sheets ให้ผู้สอนดู เดือนนี้ต้องส่งเข้าระบบบัญชีด้วย ทุกปลายทางทำห้าขั้นเหมือนกัน คือดึงยอดขาย ตัดยอดคืนเงิน คิดค่าธรรมเนียม จัดรูปแบบ แล้วส่ง
แก้การตัดยอดคืนเงินในไฟล์ CSV แล้ว แต่ Google Sheets กับระบบบัญชียังจ่ายผู้สอนเกิน
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ซ้าย ไฟล์ลำดับขั้นดึงยอดขาย ตัดยอดคืนเงิน คิดค่าธรรมเนียม แล้วส่งต่อให้ปลายทางจัดรูปแบบและส่งออก ปลายทาง CSV กับ Google Sheets เขียนแค่สองขั้นท้าย ขวา ไฟล์ CSV กับไฟล์ Sheets เขียนครบทุกขั้นเอง
ซ้าย AI เพิ่มปลายทางระบบบัญชี ที่มีแค่จัดรูปแบบกับส่งออก ขวา AI ก๊อปไฟล์ Sheets เป็นไฟล์ระบบบัญชี แล้วเปลี่ยนสองขั้นท้าย รอบนี้ยอดตรงทุกที่
ซ้าย AI แก้ขั้นตัดยอดคืนเงินที่เดียว ทั้งสามปลายทางได้ตาม ขวา AI แก้ในไฟล์ CSV ตามที่ฝ่ายบัญชีแจ้ง ส่วน Sheets กับระบบบัญชียังนับคืนเงินบางส่วน ยอดในสองที่นี้สูงกว่า CSV
ซ้าย AI เพิ่มขั้นหักภาษีในไฟล์ลำดับขั้น ก่อนจัดรูปแบบ ทุกปลายทางได้ตาม ขวา AI แก้ขั้นร่วมทั้งสามไฟล์ แตะ 3 ไฟล์ ทดสอบซ้ำ 9 ตัว สองไฟล์ที่พังจากรอบก่อนก็ยังพังอยู่
งานที่ทำเป็นขั้นตามลำดับเดิมทุกครั้ง ให้ล็อกลำดับและขั้นที่เหมือนกันไว้ที่เดียว แต่ละแบบเขียนแค่ขั้นที่ต่าง
ถามก่อนรับ diffไฟล์ใหม่นี้ก๊อปขั้นที่ไฟล์อื่นมีอยู่แล้วหรือเปล่า ถ้าพรุ่งนี้ขั้นนั้นถูกแก้ ต้องแก้กี่ที่
Template Method (Gamma, Helm, Johnson, Vlissides 1994): define the skeleton of an algorithm in an operation, deferring some steps to subclasses; subclasses redefine certain steps without changing the algorithm's structureแปดชื่อ แปดคำสั่งที่สั้นลง
ทุกแพทเทิร์นในบทนี้ตอบคำถามเดียวกับ SOLID: ของที่เปลี่ยนบ่อย ให้มันเปลี่ยนในที่ของมันเอง Strategy กับ Factory Method แยก "ทำยังไง" ออกจาก "เลือกอันไหน" Observer ให้คนที่สนใจเหตุการณ์มาลงชื่อเอง Adapter กับ Facade กั้นผู้ให้บริการและระบบข้างหลังไว้หลังหน้าเดียว Decorator เพิ่มความสามารถโดยไม่เปิดของเดิม Command ทำให้การกดปุ่มเป็นของที่เก็บ ต่อคิว และย้อนได้ Template Method ล็อกลำดับขั้นไว้ที่เดียว ใช้ชื่อพวกนี้ในข้อความที่ส่งให้ AI แล้วตรวจ diff ว่ารูปทรงตรงกับชื่อ
อยากรู้ตอนมีกระดานใหม่
ทุกหลักสูตรตอนนี้อ่านฟรี ทิ้งอีเมลไว้ แล้วจะส่งให้เฉพาะตอนมีหลักสูตรหรือกระดานใหม่ ไม่มีอย่างอื่น