TERRA RPC

กำลังเตรียมกระดาน…

Agent Dev Thai Academyprinciples · patterns · architecture
หลักสูตร · แผนภาพที่ CI เช็กได้
0/4
แผนภาพในงานจริง · ร้านเดิม สามกระดาน

แผนภาพที่ CI เช็กได้

ร้านขายคอร์สออนไลน์ร้านเดิม มีแผนภาพอยู่แล้วสามรูป รูปแรกบอกว่าส่วนไหนเรียกใช้ส่วนไหนได้ รูปที่สองบอกลำดับตอนลูกค้ากดจ่าย รูปที่สามบอกว่าออเดอร์เปลี่ยนสถานะไปทางไหนได้ ฝั่งซ้ายเก็บแผนภาพเป็นไฟล์ข้อความใน repo แล้วให้ CI อ่าน ฝั่งขวาเก็บเป็นรูปใน Notion หรือใน README หรือไม่มีรูปเลย

วาดรูปไม่ใช่งานยากแล้ว skill อย่าง show-me, visual-explainer หรือ anatomy วาดให้ได้ในนาทีเดียว แต่รูปที่สวยไม่กันอะไร AI ไม่เปิด Notion และไม่ดูรูป มันอ่านโค้ด แล้วเขียนตามโค้ดข้าง ๆ แผนภาพที่ไม่มีอะไรเช็ก จะผิดไปจากโค้ดทีละ PR โดยไม่มีใครรู้ แผนภาพที่ CI อ่าน คือสัญญาที่ AI ต้องผ่านก่อน merge กดถัดไปแล้วนับว่าฝั่งไหนโดนจับก่อน merge และฝั่งไหนพังหลังปล่อยขึ้นระบบ บทจะถูกนับว่าเรียนจบเมื่อคุณไปถึงขั้นสุดท้ายของรูป

1
ตอนที่ 1 · แผนภาพโครงสร้างเป็นกฎที่ CI รันให้ AI เพิ่มเช็กสมาชิกหมดอายุ แล้วโค้ดค่อย ๆ หลุดจากรูปใน Notion
เรื่องย่อ

แผนภาพแบบนี้วาดได้ในนาทีเดียวด้วย show-me หรือ visual-explainer กระดานนี้ไม่สอนวาด แต่สอนให้รูปกลายเป็นกฎที่ CI รัน ร้านคอร์สออนไลน์มีแผนภาพสถาปัตยกรรมหนึ่งรูป บอกว่ากฎธุรกิจไม่เรียกใครข้างนอก บอทเรียกได้แค่กฎธุรกิจ และมีแค่ชั้นเชื่อมต่อที่แตะฐานข้อมูล สัปดาห์นี้คุณส่งงานให้ AI สามชิ้น เช็กสมาชิกหมดอายุ ให้บอทตอบราคา และย้ายฐานข้อมูลไป Drizzle

AI ไม่เคยเปิด Notion มันอ่านโค้ด แล้วเรียกใช้อะไรก็ได้ที่ค้นเจอ บนฝั่งขวาทุก PR ผ่าน เพราะไม่มีอะไรเทียบโค้ดกับรูป คุณเห็นบรรทัดเรียกใช้ใหม่ใน diff แต่ไม่รู้ว่ามันข้ามเส้นในรูป

สองฝั่งมีแผนภาพรูปเดียวกัน หน้าจอ บอท และชั้นเชื่อมต่อฐานข้อมูล ชี้เข้ากฎธุรกิจ ส่วนกฎธุรกิจไม่ชี้ออกไปไหน ซ้ายเก็บรูปนี้เป็นไฟล์ข้อความใน repo แล้วสร้างกฎให้ CI รันทุก PR ขวาเก็บรูปไว้ใน Notion คุณจะส่งงานสามชิ้นที่ชวนให้เรียกข้ามเส้น

กล่องบนกระดานนี้ · 4
ส่วนทำอะไรทำไม
แผนภาพในโค้ดแผนภาพรูปเดียวกัน เก็บเป็นไฟล์ข้อความอยู่ใน repo CI อ่านได้ คนรีวิวเห็นใน diff
กฎที่ CI รันกฎว่าส่วนไหนเรียกส่วนไหนได้ สร้างจากแผนภาพทุกเส้นในรูปกลายเป็นกฎหนึ่งข้อ
รูปใน Notionรูปเดียวกัน แต่อยู่นอก repoCI ไม่อ่าน AI ไม่เห็น
กฎราคาคิดราคาหลังส่วนลดชั้นในที่ไม่ควรเรียกใช้ชั้นนอก
1
Class & Package Diagrams · แผนภาพโครงสร้างเป็นกฎที่ CI รันคุณจะสั่ง AI ว่าอะไร
1
Class & Package Diagrams · แผนภาพโครงสร้างเป็นกฎที่ CI รัน
ตอนที่ 1 · สถานการณ์

แผนภาพแบบนี้วาดได้ในนาทีเดียวด้วย show-me หรือ visual-explainer กระดานนี้ไม่สอนวาด แต่สอนให้รูปกลายเป็นกฎที่ CI รัน ร้านคอร์สออนไลน์มีแผนภาพสถาปัตยกรรมหนึ่งรูป บอกว่ากฎธุรกิจไม่เรียกใครข้างนอก บอทเรียกได้แค่กฎธุรกิจ และมีแค่ชั้นเชื่อมต่อที่แตะฐานข้อมูล สัปดาห์นี้คุณส่งงานให้ AI สามชิ้น เช็กสมาชิกหมดอายุ ให้บอทตอบราคา และย้ายฐานข้อมูลไป Drizzle

ให้ AI เพิ่มเช็กสมาชิกหมดอายุ แล้วโค้ดค่อย ๆ หลุดจากรูปใน Notion

แผนภาพใน repo · CI เช็กทุก PR
แผนภาพใน Notion · ไม่มีอะไรเช็ก

ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน

แผนภาพใน repo · CI เช็กทุก PR
แผนภาพใน Notion · ไม่มีอะไรเช็ก
แผนภาพใน repo · CI เช็กทุก PR
แผนภาพ
แผนภาพในโค้ดแผนภาพเป็นไฟล์ข้อความCI อ่านทุก PR
กฎธุรกิจไม่เรียกใช้ชั้นนอกบอทเรียกได้แค่กฎธุรกิจฐานข้อมูลอยู่ในชั้นเชื่อมต่อที่เดียว
กฎที่ CI รันสร้างจากแผนภาพรันใน CI
กฎ: กฎธุรกิจห้ามเรียกชั้นนอกกฎ: บอทเรียกได้แค่กฎธุรกิจกฎ: ฐานข้อมูลอยู่แค่ชั้นเชื่อมต่อ
ชั้นใน · กฎธุรกิจ
กฎราคากฎส่วนลด
คิดราคาหลังส่วนลด
ชั้นนอก · หน้าจอ บอท ฐานข้อมูล
หน้าจ่ายเงินหน้าจ่ายเงิน
ใช้ ← กฎราคา
แสดงตัวเลขเป็นบาทวาดหน้าจอ
บอท LINEบอท LINE
ใช้ ← กฎราคา
ตอบข้อความ
อ่านสมาชิกจากฐานข้อมูลอ่านสมาชิกจากฐานข้อมูล
ใช้ ← กฎราคา, prisma
ตารางสมาชิก (ผ่าน Prisma)หาสมาชิกจากรหัส
แผนภาพใน Notion · ไม่มีอะไรเช็ก
แผนภาพ
รูปใน Notionวาดเมื่อ 6 เดือนก่อนCI ไม่เห็น
กฎธุรกิจไม่เรียกใช้ชั้นนอกบอทเรียกได้แค่กฎธุรกิจฐานข้อมูลอยู่ในชั้นเชื่อมต่อที่เดียว
ชั้นใน · กฎธุรกิจ
กฎราคากฎส่วนลด
คิดราคาหลังส่วนลด
ชั้นนอก · หน้าจอ บอท ฐานข้อมูล
หน้าจ่ายเงินหน้าจ่ายเงิน
ใช้ ← กฎราคา
แสดงตัวเลขเป็นบาทวาดหน้าจอ
บอท LINEบอท LINE
ใช้ ← กฎราคา
ตอบข้อความ
อ่านสมาชิกจากฐานข้อมูลอ่านสมาชิกจากฐานข้อมูล
ใช้ ← กฎราคา, prisma
ตารางสมาชิก (ผ่าน Prisma)หาสมาชิกจากรหัส
ขั้นสุดท้าย · ลากขั้นตอนมาแยกเป็นไฟล์ใหม่ตรงนี้+ ไฟล์ใหม่ลากสามเส้นจากรูปใน Notion ไปแผนภาพในโค้ด แล้วย้ายโค้ดที่ข้ามเส้นกลับที่

กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย

เขียว: ที่แก้หรือเพิ่มประ: ต้องทดสอบซ้ำแดง: พัง หรือเส้นในรูปที่ผิดไปแล้ว

บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

ซ้าย แผนภาพในโค้ดมีสามเส้น และไฟล์กฎที่ CI รันมีกฎสามข้อตรงกัน ขวา มีรูปเดียวกันใน Notion ส่วนโค้ดสองฝั่งเหมือนกันทุกไฟล์

ขั้นที่ 1เช็กว่าสมาชิก Gold หมดอายุหรือยัง

ซ้าย รอบแรก AI ให้กฎราคาต่อฐานข้อมูลเอง กฎ CI ไม่ให้ merge รอบสองมันใช้วันหมดอายุที่ส่งเข้ามาอยู่แล้ว ขวา AI ให้กฎราคาดึงสมาชิกจากฐานข้อมูลตรง ๆ test ผ่าน merge ได้ และใช้งานได้จริง

ขั้นที่ 2ให้บอท LINE ตอบราคาเป็นบาท

ซ้าย รอบแรกบอทดึงตัวจัดรูปแบบเงินจากหน้าเว็บ กฎ CI ไม่ให้ merge AI เลยย้ายมันไปชั้นกฎธุรกิจ ให้เว็บกับบอทเรียกที่เดียวกัน ขวา บอทดึงจากหน้าเว็บตรง ๆ test ผ่าน แต่ตัวบอทโหลดไฟล์สไตล์ของหน้าเว็บไม่ได้ บอทเปิดไม่ขึ้น

ขั้นสุดท้ายย้ายฐานข้อมูลจาก Prisma ไป Drizzle

ซ้าย รูปบอกว่าฐานข้อมูลอยู่ชั้นเชื่อมต่อที่เดียว และ CI ยืนยันทุก PR คุณสั่ง AI แก้แค่ไฟล์นั้น แล้วงานจบในไฟล์เดียว ขวา คุณเปิดรูปใน Notion แล้วสั่งงานแบบเดียวกัน คอมไพล์ไม่ผ่านที่กฎราคา ซึ่งไม่อยู่ในแผน รูปผิดไปแล้วทั้งสามเส้น

หลักการ ในภาษาของโค้ด

แผนภาพที่ไม่มีอะไรเช็ก จะผิดไปจากโค้ดเงียบ ๆ ให้แผนภาพโครงสร้าง (Class Diagram, Package Diagram) อยู่ใน repo แล้วแปลงเป็นกฎที่ CI รัน PR ที่เรียกข้ามเส้นต้องไม่ผ่าน

ถามก่อนรับ diffdiff นี้มีการเรียกใช้ใหม่ที่ข้ามเส้นในแผนภาพไหม และ CI รู้เรื่องเส้นนั้นหรือเปล่า

Package diagrams (Fowler, UML Distilled, 3rd ed. 2003, ch. 7: UML as sketch, blueprint or programming language); enforced as dependency-cruiser forbidden rules (or eslint-plugin-boundaries) in CI
2
ตอนที่ 2 · ลำดับตอนจ่ายเงินเป็น testให้ AI ทำหน้าจ่ายเงินให้เร็วขึ้น แล้วบัตรที่ถูกปฏิเสธได้คอร์สฟรี
เรื่องย่อ

ลำดับการเรียกวาดได้ในนาทีเดียวด้วย show-me หรือ anatomy กระดานนี้สอนให้รูปกลายเป็น test ที่จดลำดับ หน้าจ่ายเงินของร้านใช้เวลา 3 วินาที มีคนขอให้เร็วขึ้น AI เปิดขั้นตอนสั่งซื้อ แล้วเห็นว่าตัดเงินกับให้สิทธิ์เรียนเรียกต่อกัน มันคิดว่าสองขั้นนี้ไม่ได้ใช้ผลของกันและกัน

บนฝั่งขวา test ถามแค่ว่าให้สิทธิ์เรียนแล้วหรือยัง ไม่ถามว่าให้หลังเงินเข้าหรือเปล่า และตัวปลอมทุกตัวคืนค่าสำเร็จ diff ที่สลับลำดับจึงเขียวทั้งหมด คนที่จะเจอปัญหาก่อนคือลูกค้าที่บัตรไม่ผ่าน

สองฝั่งมีขั้นตอนสั่งซื้อเหมือนกัน ตัดเงิน แล้วให้สิทธิ์เรียน แล้วส่งอีเมลกับ LINE ซ้ายเขียนลำดับนี้เป็นไฟล์แผนภาพแบบข้อความ และมี test หนึ่งตัวต่อหนึ่งทางของแผนภาพ ขวามีรูปใน README กับ test ที่ตัวปลอมทุกตัวสำเร็จเสมอ

กล่องบนกระดานนี้ · 4
ส่วนทำอะไรทำไม
ลำดับตอนจ่ายเงิน (ไฟล์ข้อความ)แผนภาพลำดับตอนจ่ายเงินมีทั้งทางที่สำเร็จและทางที่ล้ม
test ที่อ่านแผนภาพtest หนึ่งตัวต่อหนึ่งทางตัวปลอมจดลำดับที่ถูกเรียกจริง แล้วเทียบกับแผนภาพ
ขั้นตอนสั่งซื้อลำดับที่สองฝั่งมีเหมือนกันลำดับในไฟล์นี้คือสิ่งที่ AI สลับได้
test เดิมtest ฝั่งขวา ตัวปลอมสำเร็จทุกตัวเช็กว่าให้สิทธิ์แล้ว แต่ไม่เช็กว่าให้ตอนไหน
2
Sequence Diagrams · ลำดับตอนจ่ายเงินเป็น testคุณจะสั่ง AI ว่าอะไร
2
Sequence Diagrams · ลำดับตอนจ่ายเงินเป็น test
ตอนที่ 2 · สถานการณ์

ลำดับการเรียกวาดได้ในนาทีเดียวด้วย show-me หรือ anatomy กระดานนี้สอนให้รูปกลายเป็น test ที่จดลำดับ หน้าจ่ายเงินของร้านใช้เวลา 3 วินาที มีคนขอให้เร็วขึ้น AI เปิดขั้นตอนสั่งซื้อ แล้วเห็นว่าตัดเงินกับให้สิทธิ์เรียนเรียกต่อกัน มันคิดว่าสองขั้นนี้ไม่ได้ใช้ผลของกันและกัน

ให้ AI ทำหน้าจ่ายเงินให้เร็วขึ้น แล้วบัตรที่ถูกปฏิเสธได้คอร์สฟรี

แผนภาพลำดับ · test ทุกทาง
รูปใน README · test แค่ทางสำเร็จ

ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน

แผนภาพลำดับ · test ทุกทาง
รูปใน README · test แค่ทางสำเร็จ
แผนภาพลำดับ · test ทุกทาง
แผนภาพ
ลำดับตอนจ่ายเงิน (ไฟล์ข้อความ)แผนภาพเป็นไฟล์ข้อความtest อ่านไฟล์นี้
ตัดเงิน แล้วค่อยถือว่าจ่ายแล้วให้สิทธิ์เรียน หลังเงินเข้าเท่านั้นอีเมลกับ LINE ล้มได้ ไม่ทำให้ออเดอร์ล้ม
test ที่อ่านแผนภาพจดลำดับที่เรียกจริงเทียบกับแผนภาพ
ใช้ ← ขั้นตอนสั่งซื้อ
ทางที่จ่ายผ่านทางที่บัตรถูกปฏิเสธทางที่ขั้นหลังจ่ายล้ม
โค้ด
ขั้นตอนสั่งซื้อลำดับที่โค้ดเรียกจริง
ใช้ ← omise, resend, line-sdk
ตัดเงินผ่าน Omiseให้สิทธิ์เข้าเรียนส่งใบเสร็จทางอีเมลส่งข้อความ LINE
รูปใน README · test แค่ทางสำเร็จ
แผนภาพ
รูปใน READMEรูปใน READMEไม่มีอะไรอ่าน
ตัดเงิน แล้วค่อยถือว่าจ่ายแล้วให้สิทธิ์เรียน หลังเงินเข้าเท่านั้นอีเมลกับ LINE
โค้ด
ขั้นตอนสั่งซื้อลำดับที่โค้ดเรียกจริง
ใช้ ← omise, resend, line-sdk
ตัดเงินผ่าน Omiseให้สิทธิ์เข้าเรียนส่งใบเสร็จทางอีเมลส่งข้อความ LINE
test เดิมตัวปลอมสำเร็จทุกตัวเช็กแค่ว่าให้สิทธิ์แล้ว
ใช้ ← ขั้นตอนสั่งซื้อ
เช็กแค่ว่าให้สิทธิ์เรียนแล้ว
ขั้นสุดท้าย · ลากขั้นตอนมาแยกเป็นไฟล์ใหม่ตรงนี้+ ไฟล์ใหม่ลากเส้นจากรูปใน README ไปไฟล์แผนภาพ แล้วลาก test เดิมไปรวมกับ test ที่อ่านแผนภาพ

กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย

เขียว: ที่แก้หรือเพิ่มประ: ต้องทดสอบซ้ำแดง: เงินหรือคอร์สที่ผิดคน

บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

ซ้าย แผนภาพบอกว่าให้สิทธิ์เรียนมาหลังเงินเข้า และอีเมลกับ LINE ล้มได้โดยไม่ทำให้ออเดอร์ล้ม test มีทางที่จ่ายผ่าน ทางที่บัตรถูกปฏิเสธ และทางที่ขั้นหลังจ่ายล้ม ขวา มีรูปใน README กับ test เดิมที่ตัวปลอมสำเร็จทุกตัว

ขั้นที่ 1ขอให้หน้าจ่ายเงินเร็วขึ้น

ซ้าย รอบแรก AI ให้ตัดเงินกับให้สิทธิ์ทำพร้อมกัน test ทางที่บัตรถูกปฏิเสธไม่ผ่าน เพราะให้สิทธิ์ทั้งที่บัตรไม่ผ่าน รอบสองมันทำพร้อมกันแค่อีเมลกับ LINE ตามที่แผนภาพบอกว่าทำพร้อมกันได้ ขวา AI ทำแบบรอบแรก test ผ่าน เร็วขึ้น 1.2 วินาที แล้ว merge

ขั้นที่ 2บัตรของลูกค้าถูกปฏิเสธ

ซ้าย เดินตามทางที่ถูกปฏิเสธ ตัดเงินไม่ผ่านแล้วส่งอีเมลแจ้ง ไม่ให้สิทธิ์ ขวา ให้สิทธิ์วิ่งไปพร้อมตัดเงิน ลูกค้าได้คอร์สทั้งที่ไม่ได้จ่าย ไม่มี test ไหนแดง รูปใน README ยังวาดว่าให้สิทธิ์หลังเงินเข้า

ขั้นสุดท้ายแจ้งผู้สอนทางอีเมล ทุกครั้งที่มีคนซื้อ

ซ้าย AI เพิ่มการแจ้งผู้สอน และต้องเพิ่มเส้นในแผนภาพด้วย test เลยได้ทางที่มันล้มมาเอง รอบแรกมันล้มหลังตัดเงิน ไม่ได้ merge รอบสองห่อแบบเดียวกับอีเมล ขวา บางคอร์สไม่มีอีเมลผู้สอน การแจ้งล้มหลังตัดเงิน หน้าเว็บบอกว่าจ่ายไม่สำเร็จ ลูกค้ากดจ่ายอีกรอบ โดนตัดเงินสองครั้ง

หลักการ ในภาษาของโค้ด

ลำดับการเรียกที่เกี่ยวกับเงิน ต้องเป็น test ไม่ใช่รูป วาดแผนภาพลำดับ (sequence diagram) เป็นไฟล์ข้อความ แล้วให้ test ไล่ทุกทาง รวมทางที่ล้ม

ถามก่อนรับ diffdiff นี้เปลี่ยนลำดับหรือเพิ่มขั้นในการจ่ายเงินไหม ถ้าใช่ แผนภาพกับทางที่ล้มถูกแก้ใน PR เดียวกันหรือเปล่า

Sequence diagrams (Fowler, UML Distilled, 3rd ed. 2003, ch. 4); the diagram's paths checked as a contract test (Fowler, “ContractTest” 2011) with a recording fake
3
ตอนที่ 3 · สถานะออเดอร์เป็นตารางเดียวเพิ่มปุ่มคืนเงินให้แอดมิน แล้วคนที่ได้เงินคืนกลับมาดูคอร์สได้
เรื่องย่อ

แผนภาพสถานะวาดได้ในนาทีเดียวด้วย visual-explainer กระดานนี้สอนให้รูปกลายเป็นตารางเดียวที่ทุกไฟล์ต้องผ่าน ออเดอร์ของร้านเริ่มที่รอจ่าย แล้วไปเป็นจ่ายแล้วหรือยกเลิก แอดมินขอปุ่มคืนเงินในหลังบ้าน คุณส่งงานให้ AI และมันเปิดโปรเจกต์เพื่อเขียนปุ่มนั้น

บนฝั่งขวา สถานะคือธงสามตัว ที่หน้าจ่ายเงิน ตัวรับสัญญาณจาก Omise cron และบอท LINE ตั้งเอง แต่ละไฟล์ต้องรู้เองว่าธงไหนต้องตั้งคู่กับธงไหน ใน diff คุณเห็นแค่บรรทัดอัปเดตหนึ่งบรรทัด ไม่เห็นสถานะที่ไม่ควรเกิดได้

ซ้ายมีแผนภาพสถานะเป็นไฟล์ข้อความ กับตารางเส้นที่อนุญาตชุดเดียวในไฟล์สถานะออเดอร์ ทุกไฟล์เปลี่ยนสถานะผ่านที่นั่น และ test ลองทุกคู่ สถานะ × เหตุการณ์ ขวาเก็บสถานะเป็นธงสามตัว จ่ายแล้ว ยกเลิก คืนเงิน ที่สี่ไฟล์ตั้งเอง คุณจะเพิ่มปุ่มคืนเงิน เจอสัญญาณที่มาซ้ำ แล้วเพิ่มสถานะใหม่

กล่องบนกระดานนี้ · 5
ส่วนทำอะไรทำไม
แผนภาพสถานะ (ไฟล์ข้อความ)เส้นว่าสถานะไหนไปไหนได้เส้นที่ไม่มีในรูป คือการเปลี่ยนที่ห้าม
สถานะออเดอร์ตารางเส้นที่อนุญาต กับทางเดียวที่เปลี่ยนสถานะที่เดียวที่เปลี่ยนสถานะได้
test ทุกคู่สถานะลองทุกคู่ สถานะ × เหตุการณ์คู่ที่ไม่มีเส้นในแผนภาพต้องถูกปฏิเสธ
ตารางออเดอร์ธงสามตัวของฝั่งขวาได้ 8 แบบ ที่ควรเกิดได้มีแค่ 4
หน้าคอร์สของฉันฝั่งขวาอ่านธงเองต้องรู้จักธงทุกตัวเองว่าดูได้ไหม
3
State Machine Diagrams · สถานะออเดอร์เป็นตารางเดียวคุณจะสั่ง AI ว่าอะไร
3
State Machine Diagrams · สถานะออเดอร์เป็นตารางเดียว
ตอนที่ 3 · สถานการณ์

แผนภาพสถานะวาดได้ในนาทีเดียวด้วย visual-explainer กระดานนี้สอนให้รูปกลายเป็นตารางเดียวที่ทุกไฟล์ต้องผ่าน ออเดอร์ของร้านเริ่มที่รอจ่าย แล้วไปเป็นจ่ายแล้วหรือยกเลิก แอดมินขอปุ่มคืนเงินในหลังบ้าน คุณส่งงานให้ AI และมันเปิดโปรเจกต์เพื่อเขียนปุ่มนั้น

เพิ่มปุ่มคืนเงินให้แอดมิน แล้วคนที่ได้เงินคืนกลับมาดูคอร์สได้

สถานะเดียว · ไปได้แค่ตามเส้น
ธงสามตัว · หลายไฟล์ตั้งเอง

ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน

สถานะเดียว · ไปได้แค่ตามเส้น
ธงสามตัว · หลายไฟล์ตั้งเอง
สถานะเดียว · ไปได้แค่ตามเส้น
แผนภาพ
แผนภาพสถานะ (ไฟล์ข้อความ)แผนภาพเป็นไฟล์ข้อความtest อ่านไฟล์นี้
รอจ่าย → จ่ายแล้วรอจ่าย → ยกเลิกจ่ายแล้ว → คืนเงิน
สถานะ
สถานะออเดอร์ตารางเดียวทุกไฟล์เปลี่ยนสถานะผ่านที่นี่
เปลี่ยนสถานะ ตามตารางเส้นที่อนุญาตดูคอร์สได้ไหม
test ทุกคู่สถานะลองทุกคู่ สถานะ × เหตุการณ์
ใช้ ← สถานะออเดอร์
เส้นที่อยู่ในแผนภาพ ต้องผ่านคู่ที่ไม่มีเส้น ต้องถูกปฏิเสธ
ไฟล์ที่ใช้สถานะ
รับสัญญาณจาก Omiseรับสัญญาณจาก Omise
ใช้ ← สถานะออเดอร์
เปลี่ยนสถานะตามสัญญาณที่มา
…อีก 3 ไฟล์หน้าจ่ายเงินcronบอท LINE
ใช้ ← สถานะออเดอร์
เปลี่ยนสถานะผ่านตารางเดียวกัน ×3
ธงสามตัว · หลายไฟล์ตั้งเอง
แผนภาพ
ไม่มีแผนภาพ · สถานะคือธงสามตัว
สถานะ
ตารางออเดอร์ออเดอร์มีธงสามตัว
ธง จ่ายแล้วธง ยกเลิกธง คืนเงิน
ไฟล์ที่ใช้สถานะ
รับสัญญาณจาก Omiseรับสัญญาณจาก Omise
ตั้งธง จ่ายแล้วล้างธง ยกเลิก
…อีก 3 ไฟล์หน้าจ่ายเงินcronบอท LINE
ตั้งธงเอง อีก 3 ที่
หน้าคอร์สของฉันอ่านธงเอง
ดูได้ไหม = จ่ายแล้ว และไม่ยกเลิก (คิดเองจากธง)
ขั้นสุดท้าย · ลากขั้นตอนมาแยกเป็นไฟล์ใหม่ตรงนี้+ ไฟล์ใหม่ลากธงทุกตัว กับการคิดว่าดูได้ไหม ไปรวมเป็นสถานะเดียวในไฟล์สถานะออเดอร์

กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย

เขียว: ที่แก้หรือเพิ่มประ: ต้องทดสอบซ้ำแดง: สถานะที่ไม่ควรเกิดได้

บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

ซ้าย แผนภาพสถานะมีสามเส้น ตารางในไฟล์สถานะออเดอร์มีเส้นชุดเดียวกัน ตัวรับสัญญาณและอีกสามไฟล์เปลี่ยนสถานะผ่านทางเดียวกัน ขวา ตารางออเดอร์มีธงสามตัว ตัวรับสัญญาณตั้งธงจ่ายแล้วและล้างธงยกเลิกเอง และหน้าคอร์สของฉันคิดเองจากธงว่าดูได้ไหม

ขั้นที่ 1แอดมินขอปุ่มคืนเงิน

ซ้าย AI เพิ่มปุ่มที่เปลี่ยนสถานะเป็นคืนเงิน เส้น จ่ายแล้ว → คืนเงิน มีในแผนภาพอยู่แล้ว ขวา AI เพิ่มปุ่มที่ตั้งธงคืนเงิน และตั้งธงยกเลิกด้วย เพราะหน้าคอร์สอ่านธงตัวนั้น ลูกค้าได้เงินคืนและดูคอร์สไม่ได้ ใช้ได้

ขั้นที่ 2Omise ส่งสัญญาณจ่ายสำเร็จซ้ำ หลังคืนเงินแล้ว

ซ้าย คืนเงินแล้วกับจ่ายสำเร็จ ไม่มีเส้นในแผนภาพ การเปลี่ยนถูกปฏิเสธ ตัวรับสัญญาณจดบันทึกแล้วตอบรับ สถานะยังเป็นคืนเงิน ขวา ตัวรับสัญญาณล้างธงยกเลิกตามที่เคยแก้บั๊กไว้ ลูกค้าได้เงินคืนแล้ว แต่หน้าคอร์สบอกว่าดูได้

ขั้นสุดท้ายเพิ่มสถานะ ถูกดึงเงินคืน เมื่อลูกค้าให้ธนาคารดึงเงินกลับ

ซ้าย AI เพิ่มเส้น จ่ายแล้ว → ถูกดึงเงินคืน ในแผนภาพและในตาราง แล้วให้ตัวรับสัญญาณส่งเหตุการณ์นี้ รอบแรกคอมไพล์ไม่ผ่าน เพราะ ดูคอร์สได้ไหม ยังไม่รู้จักสถานะใหม่ รอบสองเพิ่มกรณีแล้ว merge ขวา AI เพิ่มธงใหม่ในตารางและตัวรับสัญญาณ แต่ไม่มีอะไรพาไปเปิดหน้าคอร์สของฉัน คนที่ดึงเงินคืนแล้วยังดูคอร์สได้

หลักการ ในภาษาของโค้ด

สถานะที่เปลี่ยนได้หลายทาง ให้เก็บเป็นค่าเดียว กับตารางเส้นที่อนุญาตชุดเดียว วาดตารางนั้นเป็นแผนภาพสถานะ (state diagram) แล้วให้ test ลองทุกคู่ คู่ที่ไม่มีเส้นต้องถูกปฏิเสธ

ถามก่อนรับ diffdiff นี้ตั้งสถานะตรง ๆ หรือผ่านทางเดียวที่เปลี่ยนสถานะได้ และเส้นที่มันใช้ มีอยู่ในแผนภาพหรือเปล่า

State machine diagrams (Fowler, UML Distilled, 3rd ed. 2003, ch. 10; Harel, “Statecharts” 1987); make illegal states unrepresentable (Minsky 2011) with an exhaustive check (assertNever)
ครบสามกระดานแล้ว? อ่านแผนภาพให้เป็นสัญญาแบบทดสอบหกข้อ ทุกข้อคือ diff ที่ AI กำลังจะส่งมาให้รีวิว
ทำแบบทดสอบ →

สามแผนภาพ สามสัญญา

แผนภาพไม่ได้มีไว้ประดับเอกสาร แต่ละรูปพูดเรื่องที่เช็กได้ แผนภาพโครงสร้างบอกว่าส่วนไหนเรียกใช้ส่วนไหนได้ เลยกลายเป็นกฎที่ CI รัน (1) แผนภาพลำดับบอกลำดับและทางที่ล้ม เลยกลายเป็น test หนึ่งตัวต่อหนึ่งทาง (2) แผนภาพสถานะบอกว่าสถานะไหนไปไหนได้ เลยกลายเป็นตารางเดียวที่ทุกไฟล์ต้องผ่าน กับ test ที่ลองทุกคู่ (3) รูปยังให้คนอ่านได้เหมือนเดิม แค่ตอนนี้มีอีกตัวที่อ่านมัน คือ CI แก้โค้ดแล้วไม่ตรงกับรูป PR ไม่ผ่าน จะเปลี่ยนรูป คนรีวิวเห็นมันใน diff

สามกระดานบนร้านคอร์สออนไลน์ร้านเดิม: กฎว่าใครเรียกใครได้ · ลำดับตอนจ่ายเงิน · สถานะออเดอร์ · แผนภาพเขียนด้วย Mermaidคีย์บนกระดาน: Enter / คลิก = ขั้นถัดไป · ⌫ = รีเซ็ต