จากงาน iOS Dev Meetup ครั้งที่ 4
มีหนึ่ง session พูดเรื่อง Redux - Brings Web Architecture to Mobile
เป็นสิ่งที่น่าสนใจมาก ๆ ที่สำคัญเข้าใจได้ไม่ยาก
ดังนั้นจึงนำมาสรุปนิดหน่อย ประกอบไปด้วย
- ที่มาของแนวคิด Redux
- Principle 3 ข้อ
- โครงสร้างการทำงาน
- Code ตัวอย่าง ซึ่งพัฒนาด้วยภาษา Swift
ที่มาของแนวคิด Redux
เป็นการนำเอาแนวคิดดีมากจาก framework/library/architecture ต่าง ๆ ไม่ว่าจะเป็น โดยที่ Redux จะเน้นในเรื่องของการจัดการ State หรือ สถานะต่าง ๆ ของ App เนื่องจากในระบบงานนั้น จะมี State จำนวนมาก ยิ่งระบบงานมีขนาดใหญ่ขึ้น ยิ่งมากขึ้นไปอีก รวมทั้ง State ส่วนใหญ่มักจะถูกเปลี่ยนแปลงได้ตลอดเวลา (Immutable) แถมยังมีความซับซ้อนแบบเท่าทวีคูณไปอีก ทำให้จัดการได้ยากมาก ๆ แสดงดังรูป ดังนั้นจึงเกิดคำถามว่า แล้วเราจะจัดการ State ต่าง ๆ เหล่านี้ของระบบอย่างไรดี ? หนึ่งในคำตอบนั้นคือ Redux นั่นเองPrinciple 3 ข้อของ Redux ที่ต้องเข้าใจ
ประกอบไปด้วย- Single source of truth
- State is read-only
- Changes are made with pure functions
โครงสร้างการทำงานของ Redux (Flow)
ส่วนการทำงานต่าง ๆ ของ Redux จะประกอบไปด้วย- State คือ สถานะต่าง ๆ ของการทำงาน
- Action คือ เหตุการณ์ต่าง ๆ ที่เกิดขึ้น
- Store คือ ที่จัดเก็บ State ต่าง ๆ หรือสามารถเรียกว่าเป็น State Container และ notify ไปยังส่วนต่าง ๆ ที่ subscribe ไว้
- Reducer คือ pure function ที่ทำการสร้าง State ถัดไปโดยพิจารณาจาก State ปัจจุบัน และ Action ที่เกิดขึ้น
- เมื่อเกิด Action ต่าง ๆ ขึ้นมา ไม่ว่าจะเกิดจาก view/data source หรืออะไรก็ตามที่ต้องการเปลี่ยนแปลง State จะถูกส่งมาที่ Store
- จากนั้น Store จะทำการเรียกใช้งาน Reducer โดยส่ง State ปัจจุบัน และ Action ไปให้
- ทำการเรียก Reducer เพื่อทำงานตาม Action
- จากนั้น Reducer ทำการส่ง State ใหม่กลับมา
- ส่ง State ใหม่กลับไปให้ Store
- จากนั้น Store จะทำการ notify หรือแจ้งไปยังส่วนการทำงานต่าง ๆ ที่ subscribed ไว้ เพื่อทำการ update ต่อไป เช่น การแสดงผล เป็นต้น
- ส่วนการแสดงผล หรือ data source อาจจะสร้าง Action ใหม่ ๆ ขึ้นมาได้อีก เช่น จากผู้ใช้งาน และ ข้อมูลจากภายในระบบ เป็นต้น
สังเกตุไหมว่า การจัดการ State นั้นมันอยู่ระหว่าง View กับ Model นั่นเอง
มาลองเขียน Code ด้วยภาษา Swift กันบ้าง
Source code มาจาก meet up นั่นเอง ReduxPlayground เป็นตัวอย่างการสร้าง TODO App จึงนำมาสรุปใหม่นิดหน่อย 1. เริ่มด้วยการกำหนด Action ก่อน ว่าใน app ของเรานั้นจะมี Action หน้าตาอย่างไร และมี Action อะไรบ้าง ตัวอย่าง code จะมี Add TODO Action ก่อน [gist id="296447def187f60be31872d1c37fc1a7" file="Action.swift"] 2. ทำการสร้าง State ขึ้นมา โดยเราสามารถกำหนดโครงสร้างของ State ในรูปแบบใด ๆ ก็ได้ จากตัวอย่าง State จะประกอบไปด้วย- List ของ TODO
- การเปลี่ยนแปลง
- ทำการเก็บ State ทั้งหมดของระบบ
- อนุญาตให้ getState() ได้
- สามารถส่ง Action เข้ามาได้
- สามารถ subscribe ได้
มาถึงตรงนี้คิดว่า น่าจะทำให้เราเข้าใจกับแนวคิดของ Redux มากขึ้นบ้าง
ซึ่งการเริ่มต้นด้วยการเขียน code เองตั้งแต่ศูนย์ มันทำให้เราเข้าใจแนวคิดมากขึ้น ลองดูกันครับปล. ได้ยินมาอีกว่า Kotlin มันก็คล้าย ๆ กับ Swift นะ ดังนั้นสามารถเอาควาวมรู้เหล่านี้ไปเขียนด้วย Kotlin สำหรับการพัฒนา Android app ได้เลย มันน่าสนใจมาก ๆ