Agent Dev Thai Academyprinciples · patterns · architecture
DDD ในงานจริง · แบบทดสอบ
0/5
ก่อนปิดบท

ทายก่อนรันโค้ด

ทุกข้อคือคำขอจากฝ่ายต่าง ๆ ในร้านที่โตขึ้น

คะแนน 0 / 8
ข้อ 1 / 8

billing, learning และ marketing ใช้ User ตัวเดียวจาก models/user.ts marketing ขอติดป้าย active ให้คนที่คลิกแคมเปญ agent เจอ user.status อยู่แล้วเลยใช้ต่อ คุณคาดว่าจะเกิดอะไร?

1 · Bounded Context status ของ billing แปลว่ายังจ่ายเงินอยู่ ของ marketing แปลว่าคลิกแล้ว พอทั้งสองทีมใช้ model เดียว คำเดียวกันจึงมีสองความหมาย และ diff ของ marketing ไม่มีไฟล์ billing ให้คนรีวิวเห็นเลย ให้แต่ละทีมมี model ของตัวเอง (Customer, Contact) แชร์กันแค่ id ดูบนกระดาน 1 · Bounded Context →
ข้อ 2 / 8

diff จากทีม billing: + taxId?: string ใน models/user.ts ที่สามทีม import ร่วมกัน คำถามที่ควรถามก่อนรับคืออะไร?

1 · Bounded Context ทุกฟิลด์ที่เพิ่มใน model กลาง ทำให้ทุกทีมที่ import ต้อง review และทดสอบซ้ำ เลขผู้เสียภาษีเป็นเรื่องของ billing ควรอยู่ใน billing/customer.ts ที่ทีมอื่นไม่เห็น ดูบนกระดาน 1 · Bounded Context →
ข้อ 3 / 8

ซัพพอร์ตพิมพ์ว่า “ยกเลิก enrollment แล้วคืนเงิน” แต่ในโค้ดเรื่องนี้ชื่อ addStudent และตาราง course_members agent ค้นคำว่า enrollment เจอ 0 ไฟล์ มันมักจะทำอะไร?

2 · Ubiquitous Language agent ค้นคำที่คนสั่งพิมพ์ ถ้าคำนั้นไม่มีในโค้ด มันจะสร้างของใหม่ข้าง ๆ ของเดิม ใช้คำเดียวกันทั้งในแชต โค้ด ตาราง และหน้าจอ แล้วการค้นครั้งเดียวจะเจอทุกที่ ดูบนกระดาน 2 · Ubiquitous Language →
ข้อ 4 / 8

diff ส่ง LINE เตือนคนที่ยังไม่เริ่มเรียน ใช้ learners() จาก bot/line.ts ซึ่งกรอง source: "line" ปัญหาคืออะไร?

2 · Ubiquitous Language ชื่อที่ตรงกับคำขอ แต่ความหมายแคบกว่า อันตรายกว่าชื่อที่ค้นไม่เจอ เพราะ diff ดูถูกทุกบรรทัด ทีมควรมีคำเดียวสำหรับเรื่องนี้ (enrollment) และคำนั้นต้องครอบคลุมทุกช่องทาง ดูบนกระดาน 2 · Ubiquitous Language →
ข้อ 5 / 8

หน้าเว็บ หลังบ้าน และบอท LINE ต่างคนต่างอ่าน seatsTaken แล้วเขียน seatsTaken + 1 แต่ละทางผ่าน test ที่จองทีละคน รุ่นมี 30 ที่ flash sale มีคน 200 คนกดพร้อมกัน จะเกิดอะไร?

3 · Aggregate อ่าน เช็ก แล้วเขียนกลับ จากสามที่ ไม่มีใครรับประกันกฎ ห้ามขายเกิน ให้รุ่นเป็น aggregate ที่มีทางเข้าเดียว (reserveSeat) และ save พร้อมเช็ก version คนที่จองตัดหน้าจะทำให้อีกคนต้องโหลดใหม่ ไม่ใช่เขียนทับ ดูบนกระดาน 3 · Aggregate →
ข้อ 6 / 8

diff ของหน้าหลังบ้าน: db.cohort.update({ data: { seatsTaken: Number(form.seats) } }) ควรขอให้แก้เป็นอะไร?

3 · Aggregate ข้อมูลภายใน aggregate แก้ได้ผ่าน method ของมันเท่านั้น เพราะ method คือที่ที่กฎถูกเช็ก หลังบ้านที่ตั้งตัวเลขเอง ข้ามกฎ capacity ไปทั้งก้อน ดูบนกระดาน 3 · Aggregate →
ข้อ 7 / 8

ERP ของฝ่ายบัญชีเปลี่ยนรหัสสถานะ “02” เป็น “PAID” บนระบบที่ทุกไฟล์อ่าน STAT_CD เอง agent แก้ไป 3 ไฟล์ ไฟล์ที่ลืมคือ cron ที่เช็ก !== "02" แล้วส่งโอนใหม่ ผลคืออะไร?

4 · Anti-Corruption Layer เมื่อรหัสของระบบข้างนอกกระจายอยู่ทุกไฟล์ การเปลี่ยนของมันคือการไล่หาให้ครบ แปลง STAT_CD เป็น status ของเราที่ acl/erp.ts ที่เดียว ERP เปลี่ยน แก้บรรทัดเดียว cron ไม่รู้เรื่อง ดูบนกระดาน 4 · Anti-Corruption Layer →
ข้อ 8 / 8

diff บอท LINE: dayjs(d.PAY_DT, "YYYYMMDD").toDate().toLocaleDateString("th-TH") ทั้งที่หน้าเว็บมีโค้ดแปลง พ.ศ. ของตัวเองอยู่แล้ว ทางที่ดีกว่าคืออะไร?

4 · Anti-Corruption Layer แต่ละไฟล์ที่แปลงเอง จะแปลงไม่เหมือนกัน หน้าเว็บลบ 543 บอทบวก 543 ซ้ำ ผู้สอนเลยได้ข้อความว่าโอนปี 3110 ตัวแปลงที่ชายแดนทำให้ข้างในเห็นแค่ Date ของเรา ดูบนกระดาน 4 · Anti-Corruption Layer →
คะแนนเก็บในเบราว์เซอร์ของคุณเท่านั้น