เมื่อสัปดาห์ที่ผ่านมาเห็นมีคนพูดถึง 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 แรกเป็นอย่างไรที่นี่เลยครับ

Tags: