เมื่อสัปดาห์ที่ผ่านมาเห็นมีคนพูดถึง BMA Traffic app กันพอสมควร
ดังนั้นในฐานนะนักพัฒนา Mobile app คนหนึ่ง
เลยลองเข้าไปดูหน่อยสิว่า app พัฒนาอย่างไร ?
มีการใช้ library อะไรที่น่าสนใจบ้าง ?
ตลอดจนโครงสร้างและการทำงาน
แต่จะไม่พูดถึง UX/UI นะครับ
น่าจะทำให้เราเข้าใจการพัฒนามากยิ่งขึ้น
มาเริ่มกันเลย
ปล. เพื่อการศึกษาและเรียนรู้การพัฒนาระบบนะครับ
เริ่มด้วย library ที่ใช้งาน
ก็จะเป็น library พื้นฐานทั่วไป ยกตัวอย่างเช่น
- Picasso สำหรับจัดการข้อมูลรูปภาพ แถมยังใช้ Glide อีกด้วย
- Firebase สำหรับ Analytic, Authentication และ Cloud messaging และยังใช้ GCM อยู่นะ (Google Cloud Messaging) ในส่วน analytic มีการใช้งาน e-commerce tracker ด้วยนะ
- OrmLite สำหรับจัดการข้อมูลกับ SQLite
- Android GPUImage สำหรับทำ image fileter บน OpenGL
- OKHttp3 สำหรับติดต่อข้อมูลผ่านระบบ Network
- GoogleMap สำหรับเรื่องการแสดงแผนที่และตำแหน่ง
- การจัดการข้อมูล JSON ยังคงใช้ org.json ที่มากับ Android
- ksoap2 for android สำหรับติดต่อ WebService ด้วย SOAP
ต่อมาเรื่องการขอ Permission ก็เพียบนะ
มีเรื่อง badge ที่ขอตามยี่ห้อของ device เลยเยอะดี
น่าสนใจดีนะ อันนี้ผมไม่เคยทำ
แน่นอนว่า code ก็ต้องแยกตาม device เช่น
- Samsung
- LG
- Sony
- Asus
- HTC
- Nova
- Xiaomi
- OPPO
- Apex
การเก็บข้อมูลใน SQLite จะเก็บข้อมูล user ไว้
ซึ่งการใช้งาน OrmLite นั้น ช่วยลดจำนวน code ไปได้เยอะเลย
โครงสร้างของ app มี package ดังนี้
- model สำหรับ POJO class ต่าง ๆ
- dao (Data Access Object) สำหรับจัดการข้อมูลใน SQLite
- connector สำหรับจัดการข้อมูลผ่านระบบ network ด้วย SOAP Connector ไปยัง WebService
- task สำหรับการเรียกข้อมูลผ่าน connector ซึ่งยังคงใช้งาน AsynTask อยู่ทั้งหมด
- flow สำหรับจัดเก็บพวก Activity และ Fragment ต่าง ๆ ของ app ไว้ โดยในแต่ละ activity มีขนาดใหญ่น่าดู เนื่องจากยังเขียนในรูปแบบปกติ คือ รับ action ต่าง ๆ ผ่าน activity และเรียก class ต่าง ๆ เพื่อให้ได้ข้อมูลที่ต้องการ และแสดงผลกลับไป
โดยการสร้าง instance ต่าง ๆ ของ class ต่าง ๆ ใน app
เช่น การดึงข้อมูลต่าง ๆ
เช่น การจัดการข้อมูลใน SQLite
จะทำบน Application class ทั้งหมด
อีกอย่างที่น่าสนใจคือ ระบบนี้จะเรียกใช้งาน WebService ด้วย SOAP ทั้งหมด
ใน code ก็ระบุ ip ของ WSDL ตรง ๆ เลย !!
ส่วนจะมีระบบ secure หรือไม่ อันนี้ไม่แน่ใจ
แต่ถ้าเป็นข้อมูลแบบ public ก็ไม่น่ามีปัญหาอะไร
ซึ่ง code ทั้งหมดอยู่ในไฟล์เดียว ใน package connector นั่นเอง
ที่น่าสนใจคือ มีบาง service ที่ส่งค่าเป็นข้อมูล String ในรูปแบบ JSON กลับมา
จากนั้นต้องทำการแปลงกลับมาเป็น JSONObject/Array เพื่อนำมาใช้งานต่อไป
ส่วนการจัดการ error ต่าง ๆ พบว่า
ยังมีการใช้ e.printStackTrace() อยู่
ยังไม่ยอมยิงไปเก็บที่ Crash Analytic Tool !!
ปิดท้ายด้วยตำแหน่งหรือ localtion ที่กำหนดไว้ใน code (ค่า default)
โดยรวมเป็น app ที่ไม่ได้มีความซับซ้อนอะไรมากนัก
จำนวน code ยังไม่เยอะ
แต่ว่าแต่ละไฟล์แอบใหญ่พอสมควร
จะมีเรื่องเยอะหน่อย ๆ ก็เช่นการประมวลผลกับรูปภาพ
รวมทั้งการจัดการเรื่อง Home Badger ของแต่ละ device
และการดึงข้อมูลจากระบบ WebService ที่อาจจะเทอะถะหน่อย
รวมทั้งเรื่องของความปลอดภัยของข้อมูลที่ต้องดูกันต่อไป
แต่ถ้าระบบทำงานได้เร็ว และ รองรับปริมาณการใช้งานได้ก็น่าจะ ok นะครับ
ขอให้สนุกกับการ coding ครับ
ส่วนใครอยากดูว่า version แรกเป็นอย่างไรที่นี่เลยครับ