Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

มาดูโครงสร้าง code ของ Google I/O 2018 app for Android กัน

$
0
0

จาก session Architecture Components in Real Life (Android) ในงาน Mobile Conf 2018 มีคำถามหนึ่งที่น่าสนใจคือ ทาง Google ได้ปล่อย source code ของ Google I/O 2018 app ออกมา เหล่า Android developer ได้เข้าไปดู เข้าไปศึกษาหรือไม่ ? คำตอบที่ได้รับกลับมาคือ เงียบ (อาจจะมีคนเข้าไปดูก็ได้ แต่ไม่แสดงตัวเท่านั้นเอง) เป็นสิ่งที่แปลกมาก ๆ นะ (หรือเป็นเรื่องปกติไปแล้วนะ)
ดังนั้นเหล่า Android developer มาลองศึกษากันหน่อย ว่า Google I/O 2018 app นั้นเขาพัฒนากันออกมาอย่างไร ? มีโครงสร้างอย่างไรบ้าง ? ดังนั้นมาลองดูกัน

เมื่อเข้าไปดูก็พบว่า

ใน Android Developer Blog เขียนอธิบายไว้คร่าว ๆ แล้ว ถูกเขียนใหม่ ด้วยโครงสร้างใหม่ นั่นก็คือ Architecture Component  และภาษา Kotlin ซึ่งมีโครงสร้างดังรูป จากรูปโครงสร้างของ app ประกอบไปด้วย
  • Presentation layer สำหรับการแสดงผลซึ่งมีสองส่วนหลักคือ Activity/Fragment และ ViewModel โดยในส่วนนี้จะใช้งาน Data Binding Library สำหรับการ binding UI เข้ากับข้อมูล หรือ ViewModel ต่อไป
  • Domain layer สำหรับ Use case หรือ business process ต่าง ๆ
  • Data layer สำหรับการจัดการข้อมูลจาก data source ต่าง ๆ ผ่านสิ่งที่เรียกว่า Repository ประกอบไปด้วย FireStore, Local cache และ Google Cloud Storage โดยที่ข้อมูลจะมีทั้งแบบ static data, schedule data และ realtime data ที่สำคัญ app นี้สนับสนุนการทำงานแบบ offline ด้วยนะ
ข้อมูลที่ส่งไปมาระหว่าง layer ก็คือ LiveData ยังไม่พอนะยังใช้ Library อื่น ๆ อีก เช่น
  • Dagger2 จัดการเรื่อง Dependency Injection
  • OkHTTP จัดการเรื่องการใช้งาน API ผ่านระบบ network
  • Gson สำหรับจัดการข้อมูล JSON
  • ThreeTen สำหรับจัดการเรื่อง datetime
  • Timber สำหรับจัดการเรื่อง logging
  • Crashlytic
เขียน code ใหม่ด้วยภาษา Kotlin ยังไม่พอนะใช้งาน Android Kotlin Extension (KTX) อีกด้วย มาถึงตรงนี้ มันมาเต็มมาก ๆ เหมาะต่อการเรียนรู้สุด ๆ ถ้าใครพลาดแล้วจะเสียใจ

ดูไปดูมามันคือ Clean Architecture ชัด ๆ

ยกตัวอย่างของ Use Case ที่อยู่ใน module shared

ยังไม่พอนะ ยังมีส่วนของการทดสอบอีกด้วย

ทั้ง Unit testing ด้วย jUnit และ Mockito , Mockito-Kotlin ทั้ง UI testing ด้วย Espresso สิ่งที่น่าสนใจคือ code ใน app นี้มีการทดสอบเยอะมาก ๆ มันสะท้อนให้เห็นว่า โครงสร้างของระบบมันทดสอบได้ง่ายมาก (Testable) ดังนั้นสิ่งที่เหล่านักพัฒนาต้องเข้าใจคือ ถ้าระบบงานของเราทดสอบยากแล้ว มันกำลังบ่งบอกว่า โครงสร้างระบบของเรานั้นไม่ถูกอย่างแน่นอน

มาดูโครงสร้าง module ของ app กันหน่อย

ทำการแบ่งออกเป็น module ย่อย ๆ เพื่อแยกส่วนการทำงานต่าง ๆ ออกจากกัน แต่ต้องระวังในเรื่องของ dependency กันด้วยนะ ถ้าออกแบบไม่ดี สิ่งที่เกิดขึ้นคือ cyclic dependency หรือการเรียกกันไปมา Module ต่าง ๆ ประกอบไปด้วย
  • mobile เป็น module หลักของการทำงานประกอบไปด้วย activity, fragment, ViewModel และสิ่งต่าง ๆ ที่เกี่ยวข้องกับ UI เช่น adapter ของ data binding เป็นต้น
  • tv สำหรับ Android TV app
  • model สำหรับ model class ที่ใช้ใน app ทั้งหมด เช่น User, Speaker, Session, Room และ Tag เป็นต้น
  • shared สำหรับ business logic นั่นคือ UseCase ต่าง ๆ ที่แยกออกตาม domain เช่น Agenda, Authentication, Session, User และ Speaker เป็นต้น รวมไปถึง class การทำงานหลักอีกมากมาย
  • test-shared สำหรับสร้างข้อมูลที่ใช้ในส่วนของ Unit testing
  • androidTest-shared สำหรับเก็บ utilities class ที่ใช้ในส่วนของ UI testing
ผลจากการแยก module ทำให้การ build แบบ incremental เร็วขึ้น ถ้าแยกแล้วช้าลงน่าจะผิดนะ รวมทั้งสามารถแยกทีมช่วยกันพัฒนาได้ง่ายอีกด้วย
คำถามคือ เราควรใช้งานสิ่งต่าง ๆ เหล่านี้หรือไม่ ? จาก session นี้บอกไว้ว่า เราควรศึกษาทำความเข้าใจก่อน จากนั้นลงมือทำ PoC (Proof of Concept) ใน use case ต่าง ๆ ไม่ใช่แค่ login หรือ ดึงข้อมูลจาก github นะ เมื่อถึงเวลา และ use case ที่เหมาะสม จะได้นำมาใช้งานได้เลย มาศึกษากันดูครับ ผมว่าน่าจะได้ความรู้และแนวทางการพัฒนาที่ดีเพียบเลย ขอให้สนุกกับการ coding

Viewing all articles
Browse latest Browse all 1997

Trending Articles