ข้ามไปเนื้อหาหลัก

Vesper บน Ballast: โครงสร้างสถานะเดียวจัดการทั้งระบบ

เจาะลึกเบื้องหลังแอป Vesper ที่ใช้เฟรมเวิร์ก Ballast แบบ KMP MVI เพื่อบริหารจัดการสถานะฝั่งหน้าบ้านและหลังบ้านอย่างเป็นระบบ

เรียบเรียงโดย AI
Inewgen
04 Sep 2026ที่มา: Dev.to2 นาทีอ่าน (0 ครั้ง)
แชร์
Vesper บน Ballast: โครงสร้างสถานะเดียวจัดการทั้งระบบ

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • Ballast คือเฟรมเวิร์ก KMP MVI ที่พัฒนาขึ้นเพื่อแอป Vesper โดยเฉพาะ
  • ใช้โครงสร้าง Contract ประกอบด้วย Inputs, State และ Events ในทุกหน้าจอ
  • หลีกเลี่ยงการใช้โค้ดรีเฟล็กชันและ KSP ด้วยการเขียนโค้ดแบบชัดเจนเพื่อความเสถียร
  • ใช้ AppStateViewModel จัดเก็บสถานะข้ามหน้าจอผ่าน multiplatform-settings

ในบทความชุดบันทึกการออกแบบ Vesper ซึ่งเป็นการสร้างแอปพลิเคชันระดับโปรดักชันด้วย Kotlin Multiplatform บนงบจำกัด C.J. Brooks ผู้สร้างแอปได้อธิบายถึงสถาปัตยกรรมหลักที่ชื่อว่า Ballast ซึ่งทำหน้าที่เป็นสะพานเชื่อมระหว่างฝั่ง UI และงานเบื้องหลังบนเซิร์ฟเวอร์ โดยผู้สร้างยอมรับตรงไปตรงมาว่าตนเองเป็นผู้พัฒนาเฟรมเวิร์กนี้ขึ้นมาใช้งานเองมานานหลายปี

Ballast มีจุดเริ่มต้นจากการเป็นเฟรมเวิร์ก MVI สำหรับ Kotlin Multiplatform ที่ได้รับอิทธิพลมาจากแนวคิด Redux ของ React แต่ได้นำจุดเด่นของภาษา Kotlin อย่าง sealed interfaces มาผสมผสาน ร่วมกับการใช้ Coroutines เพื่อให้การไหลของข้อมูลเป็นไปในทิศทางเดียวอย่างยืดหยุ่นและปลอดภัย โดยกำหนดให้ทุกหน้าจอต้องสร้าง Contract ที่แบ่งออกเป็น Inputs, State และ Events

software developer writing code laptop screen office

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

การเลือกใช้สถาปัตยกรรมแบบ opinionated หรือมีกฎระเบียบที่เข้มงวด ช่วยให้นักพัฒนาสามารถควบคุมโครงสร้างโค้ดได้ง่ายขึ้น โดยเฉพาะเมื่อทำงานร่วมกับเครื่องมือ AI อย่าง Claude Code ที่ถูกนำมาช่วยเขียนโค้ดโครงสร้างของ Vesper เนื่องจาก AI สามารถปฏิบัติตามแพทเทิร์นที่กำหนดไว้ล่วงหน้าได้อย่างแม่นยำ

สำหรับข้อจำกัดเรื่องการไม่ใช้ระบบอัตโนมัติหรือโค้ดรีเฟล็กชันนั้น มาจากปัญหาความไม่เสถียรของเครื่องมือสร้างโค้ดในระบบ Kotlin Multiplatform บนเนทีฟ การเขียนโค้ดแบบชัดเจนจึงช่วยให้โค้ดมีความโปร่งใส สามารถดีบักและแก้ไขเพิ่มเติมได้ง่ายในระยะยาวโดยไม่ต้องพึ่งพาไลบรารีภายนอก

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

"Claude loves structure"

เพื่อนร่วมงานของผู้พัฒนา

ในส่วนของการจัดการข้อมูล Vesper ได้ใช้ AppStateViewModel ที่ทำงานครอบคลุมทั้งแอปพลิเคชันเพื่อเก็บข้อมูลสำคัญ เช่น โทเค็นยืนยันตัวตน ค่าสถานะธีม และสถานะการเริ่มต้นใช้งาน โดยบันทึกข้อมูลทั้งหมดลงในดิสก์ผ่านโมดูล saved-state ทำให้สามารถกู้คืนสถานะเดิมได้ทันทีเมื่อเปิดแอปใหม่

แนวทางดังกล่าวยังช่วยลดความจำเป็นในการใช้ฐานข้อมูล SQLite ขนาดใหญ่ เนื่องจากข้อมูลท้องถิ่นของแอปมีเพียงไม่กี่ค่าเท่านั้น ขณะเดียวกัน Ballast ยังถูกนำไปใช้ขับเคลื่อนระบบคิวเบื้องหลังผ่าน ballast-queue และงานกำหนดเวลาผ่าน ballast-scheduler บนฐานข้อมูล Postgres อีกด้วย

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้