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

[Android] มาดูว่า Medium app พัฒนาด้วยอะไรบ้าง ?

$
0
0

medium

medium เพื่อความสนุกในการศึกษา Android app ของชาวบ้าน เลยนำ app ที่ได้รับความนิยมในด้านดีมาดูกันหน่อย ซึ่งนำไฟล์ APK มา decompile เพื่อเรียนรู้ว่า app เหล่านั้นมีอะไรที่น่าสนใจบ้าง ทั้ง Library ที่ใช้งาน ทั้งแนวทางในการเขียน code ทั้งโครงสร้างของ code โดยมาเริ่มที่ Medium app กันเลย medium02

เริ่มต้นด้วย Library หรือ Dependency ที่ใช้งาน

บอกได้เลยว่ามันเยอะมาก ๆ จะเยอะไปไหน ?
  • Google GSON
  • Google Guava
  • Square Dagger เป็น Dependency Injector ลงไปในส่วนต่าง ๆ ของระบบ ทำให้ส่วนการทำงานแยกเป็นส่วน ๆ ชัดเจนมากขึ้น
  • Square Phrase สำหรับจัดการรูปแบบของข้อมูล ซึ่งสะดวกมาก ๆ
  • Square Picasso
  • Square Retrofit
  • RxJava with RxAndroid
  • Chrisjenx Calligraphy สำหรับการ custom font ใน app
  • Bumptech Glide
  • JakeWharton Timber สำหรับจัดการ Log
  • JakeWharton ButterKnife
  • JakeWharton DiskLRUCache
  • Flipboard BottomSheet
ซึ่งเป็นไปตาม Android app ทั่วไป ที่นิยมใช้งาน library จาก Square และ Google ส่วน library ที่ใช้เยอะ ๆ คือ JakeWharton ทั้ง Timber, DiskLRUCache และ ButterKnife คำถามที่น่าสนใจคือ ทำไมถึงใช้ทั้ง Square Picasso และ Bumptech Glide ด้วยล่ะ ? เมื่อไปดูใน code พบว่า code ใน version ใหม่ของ Medium app นั้น ใช้งาน Bumptech Glide แต่ใน feature เก่า ๆ ยังใช้งาน Square Picasso อยู่ ซึ่งดูจากการกำหนด Module ใน Dagger นั่นเอง

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

ประกอบไปด้วยส่วนการทำงานดังนี้
  • Activity สำหรับแสดงผล และ ดักจับการใช้งานจากผู้ใช้
  • View Presenter สำหรับกำหนดการทำงานในแต่ละหน้า
  • Controller เป็นส่วนควบคุมการทำงานหลัก
  • Data store สำหรับจัดเก็บข้อมูล
  • API สำหรับดึงข้อมูลจาก API ต่าง ๆ
เนื่องจากใช้ Dagger จึงมีการสร้าง Component/Module จำนวนมาก ขอบอกเลยว่าเยอะจริง ๆ ซึ่งเป็นส่วนการทำงานหลักของ Medium app เลยก็ว่าได้

ส่วนที่ชอบมาก ๆ ใน App นี้ก็คือ การใช้งาน Optional จาก Google Guava

ทำให้ข้อมูลในตัวแปร และ ข้อมูลจาก method ต่าง ๆ ไม่เป็น Null แน่นอนว่า ไม่ต้องมาตรวจสอบค่า Null หรือเจอกับปัญหา NullPointerException อีกต่อไป รวมทั้งลด ละ เลิกการใช้งาน Android Annotation ต่าง ๆ ซึ่งรกตาอย่างมาก เช่น
  • @Nullable
  • @NotNull
ตัวอย่าง code ของการใช้ Optional [gist id="922096f32415fe45d6529d0d5792e011" file="Optional.java"] ปล. ในภาษา Swift และ Kotlin นั้นเรื่อง Optional มันเข้าไปอยู่ใน type system อยู่แล้ว

เมื่อไปดูใน res/drawable พบว่ามีแต่ไฟล์ xml เท่านั้น

ไม่มีไฟล์รูปภาพใด ๆ เลย เพราะว่าไฟล์รูปภาพแยกออกไปยัง folder ตามขนาดหน้าจอไปเลย เป็นแนวปฏิบัติในการพัฒนาที่ดีเลย
วันนี้ได้เรียนรู้สิ่งต่าง ๆ เยอะมากจาก Medium app เพื่อนำไปประยุกต์ใช้ในการพัฒนาต่อไป มันสนุกดีนะ

Viewing all articles
Browse latest Browse all 1997

Trending Articles