Event Modeling

Pitchayut CheeseJa
odds.team
Published in
3 min readMar 21, 2024

เมื่อปลายปีที่แล้วมีโอกาสไปงาน YOW! Conferences ซึ่งมีหลายหัวภายในงานที่น่าสนใจ หนึ่งในนั้นคือ Event Modeling ซึ่งบรรยายโดย Adam Dymitruk (ผู้สร้าง)

เกริ่น

มนุษย์นั้นมีวิธีที่ใช้ในการสื่อสารหลายรูปแบบ แต่ละแบบนั้นให้ผลลัพท์ที่แตกต่างกัน เข้าใจบ้าง ไม่เข้าใจบ้าง ขึ้นอยู่กับหลายตัวแปร เช่น ความเข้าใจใน context ของผู้พูดและผู้ฟัง บริบท ณ ขณะนั้น เห็นภาพชัดๆก็ตอนที่ Business คุยกับ Dev เหมือนคุยคนละภาษา

เมื่อเป็นแบบนั้น Adam จึงคิดค้นวิธีที่ช่วยให้ทุกคนเข้าใจการทำงานของระบบเท่าๆกัน ไม่ว่าจะมี role เป็นอะไรก็ตาม สิ่งนั้นคือ Event Modeling

https://twitter.com/adymitruk/status/1329189987682684928/photo/1

Event Modeling

Event modeling เป็นเทคนิคในการออกแบบและจัดโครงสร้างของระบบซึ่งใช้ในการพัฒนาซอฟต์แวร์ โดยในเทคนิคนี้จะเน้นการจัดระบบโดยใช้ “event” เป็นศูนย์กลาง โดยจะมองเห็นระบบเป็นชุดของ “event” ที่เกิดขึ้นภายในระบบ และการเปลี่ยนแปลง “state” ของระบบจะทำให้เกิด “event”

สิ่งที่สำคัญของเทคนิคนี้คือการเน้นที่ “event” ที่เกิดขึ้นในระบบ และทำให้ผู้ที่เข้าใจระบบสามารถเห็นภาพรวมของกระบวนการและการตอบสนองของระบบได้อย่างชัดเจน ซึ่งจะช่วยในการทำความเข้าใจและการจัดการกับความซับซ้อนของระบบได้ดีขึ้น โดยเฉพาะในการพัฒนาระบบที่มีการเปลี่ยนแปลง state บ่อยครั้งหรือมีความซับซ้อนในกระบวนการการทำงานการใช้เทคนิค Event modeling ช่วยให้สามารถจัดการกับความซับซ้อนดังกล่าวได้โดยการแบ่งปัญหาออกเป็นส่วนๆ ที่เกี่ยวข้องกับ “event” ที่เกิดขึ้นในระบบ ซึ่งจะช่วยลดความซับซ้อนของการออกแบบและการพัฒนาระบบลงได้

เป้าหมายหลักของ Event modeling คือการสร้างแผนภาพ (diagram) ที่แสดงโครงสร้างของ “event” ในระบบอย่างชัดเจน ซึ่งสามารถใช้เป็นเครื่องมือในการสื่อสารระหว่างผู้เกี่ยวข้องในการพัฒนาระบบต่างๆ ได้ดีขึ้น และช่วยให้ทุกคนเข้าใจการทำงานของระบบเท่าๆกัน

เพื่อให้เข้าใจมากขึ้น ขอยกตัวอย่าง Wireframe ของระบบขึ้นมา

Wireframe นี้บรรยายถึง User แต่ละ Role ที่ Interact กับ Action ภายในหน้าจอทุกๆ Action (Command) ก่อให้เกิด Event ภายในระบบ เมื่อร้อยเรียงแต่ละ Event เข้าด้วยกันภายใต้แกนเวลา (T) ก็จะเห็นภาพรวมของระบบที่สัมพันธ์กัน

ถ้าสังเกตดีๆ แต่ละ Event นั้นเกิดมาจาก Command ที่ User กระทำภายในระบบ หรือก็คือสามารถมองในรูปแบบ BDD (behavior driven development) ได้ เช่น

Given: User registered.
When: User book hotel room.
Then: room booked.

แปลงมาเป็น

Events

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

การจัดการและการทำงานกับเหตุการณ์เป็นส่วนสำคัญในการพัฒนาและจัดระบบซอฟต์แวร์ด้วย Event Modeling โดยที่มุมมองนี้ช่วยให้เข้าใจกระบวนการและเหตุการณ์ที่เกิดขึ้นในระบบได้อย่างชัดเจนและลึกซึ้ง และช่วยในการวิเคราะห์และออกแบบระบบให้มีประสิทธิภาพมากยิ่งขึ้น

โดยทั่วไปแล้ว “Event” ใน Event Modeling จะถูกกำหนดและระบุโดยละเอียดเพื่อให้เป็นแนวทางในการออกแบบระบบให้มีความสมบูรณ์และแม่นยำที่สุดที่เป็นไปได้

Commands

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

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

Views (Read Models)

“View” หรือ “Read Model” หมายถึง แบบจำลองหรือการสร้างข้อมูลที่ใช้ในการแสดงผลข้อมูลให้ผู้ใช้เห็น ซึ่ง “View” นี้จะถูกสร้างขึ้นจากEvent โดย “Read Model” เป็นส่วนสำคัญในการแสดงผลข้อมูลที่เกิดจากการเก็บรวบรวมเหตุการณ์และข้อมูลภายในระบบ ซึ่งมีลักษณะเป็นแบบ read-only ซึ่งหมายความว่า “Read Model” ไม่สามารถแก้ไขหรือเปลี่ยนแปลงข้อมูลได้โดยตรง แต่เพียงแค่ใช้ในการแสดงผลหรือประมวลผลข้อมูลเท่านั้น

“View” หรือ “Read Model” ใน Event Modeling มักจะเริ่มต้นจากการกำหนดความต้องการและความจำเป็นของข้อมูลที่จะแสดงผล แล้วนำเหตุการณ์ที่เกิดขึ้นในระบบมาประมวลผลเพื่อสร้าง “View” หรือ “Read Model” ที่มีความสอดคล้องกับความต้องการของผู้ใช้

โดยทั่วไป “View” หรือ “Read Model” จะถูกออกแบบและสร้างขึ้นในขั้นตอนที่ซับซ้อนของการพัฒนาระบบ และมักจะเป็นส่วนสำคัญในการสร้าง UI/UX และการแสดงผลข้อมูลให้กับผู้ใช้ในระบบ

ทฤษฎีเยอะแล้ว มาลองปฎิบัติกันดีกว่า

การ implement Event Modeling นั้นมีแค่ 7 ขั้นตอนเท่านั้น คืออออ

(1.) Brain Storming
ระบุ project goals และข้อมูลที่เกี่ยวข้อง
ระบุพฤติกรรมของระบบ และระบุ events ที่เป็นไปได้ทั้งหมด
ระบุเฉพาะ events ที่เปลี่ยนแปลงสถานะเท่านั้นในขั้นตอนนี้

(2.) The Plot
สร้าง plot โดยใช้ event ที่ระบุ เรียงลำดับเหตุการณ์ในแบบ timeline
ตรวจสอบ timeline เพื่อให้แน่ใจว่ามีความสอดคล้องและลำดับเหตุการณ์ที่สมเหตุสมผล

(3.) The Story Board
สร้าง wireframe และ mockup หน้าจอให้สัมพันธ์กับ event ที่เกิดขึ้นในระบบ (UX Concurrency)

(4.) Identify Inputs
ทุกครั้งที่เกิด event จากการกระทำของ user เราจะเชื่อมโยงกับ UI ด้วย command ที่แสดงถึงข้อมูลที่ได้รับจากหน้าจอ

(5.) Identify Outputs
ข้อมูลที่ถูกสร้างโดย event จะถูกส่งกลับมาที่ UI ผ่าน views (read-models)

(6.) Apply Conwey’s Law
จัดการ event ในแต่ช่วงเพื่อให้ระบบสามารถทำงานเป็นส่วนๆ ได้ และสามารถแยกกัน implement ไปทีละส่วนได้

(7.) Elaborate Scenarios
แต่ละขั้นตอนของการทำงานจะเชื่อมโยงกับ command หรือ read models
ทุกๆขั้นตอนสามารถอธิบายโดยใช้เทคนิค Give-When-Then หรือ Given-Then

Conclusion

เป้าหมายหลักของ Event modeling คือการสร้างแผนภาพ (diagram) ที่แสดงโครงสร้างของ “event” ในระบบอย่างชัดเจน ซึ่งสามารถใช้เป็นเครื่องมือในการสื่อสารระหว่างผู้เกี่ยวข้องในการพัฒนาระบบต่างๆ ได้ดีขึ้น และช่วยให้ทุกคนเข้าใจการทำงานของระบบ และยังสามารถต่อยอดไปถึง Domain Driven Design (DDD) ได้อีกด้วย

event modeling บรรยายโดย Adam Dymitruk

--

--