simplenote
ทีมพัฒนา SimpleNote ได้ประกาศเปิด opensource ของ app ทุก platform ออกมาทั้ง

  • iOS พัฒนาด้วย Objective-C เป็นหลักและมี Swift นิดหน่อย
  • Android
  • macOS พัฒนาด้วย Objective-C เป็นหลัก
  • Window/Linux ซึ่งพัฒนาด้วย Electron

ดังนั้นมาลองดู code ของ Android app กันหน่อย
ว่ามีอะไรที่น่าสนใจกันบ้าง ?

เริ่มต้นด้วยคำพูดที่ชอบมาก ๆ คือ

We don’t make software for free, we make it for freedom

มาดู Library ที่ใช้พัฒนา App กันบ้าง

ภายใน build.gradle ของ App ไม่มีอะไรมาก

ส่วนใหญ่เป็นสิ่งที่ต้องมีอยู่แล้ว เช่น

  • การ sign APK แบบอัตโนมัติ คงไม่มีใครมานั่งทำแบบ manual หรอกนะ !!
  • การกำหนด configuration ต่าง ๆ ซึ่งไม่มีน่าจะมีใครไป hard code หรอกนะ !!

โครงสร้างของ code ไม่ได้ซับซ้อนอะไรมากนัก

ไม่มีการใช้ View Data Binding
ไม่มีการใช้ Dagger
ไม่มีการใช้ Reactive
ไม่มีการนำแนวคิด MVP, MVVM, VIPER มาใช้
ไม่มีวิธีการที่หวือหวาอะไร
โดยแบ่งส่วนการทำงานตาม package ดังนี้

  • Analytics ทำหน้าที่จัดการพวก analytic ต่าง ๆ ของ app
  • Model ทำหน้าที่จัดการข้อมูลบน Simperium
  • Utils เป็นส่วน utilities ต่าง ๆ ของระบบ ซึ่งเยอะมาก ๆ
  • Widgets
  • ส่วนหลักจะเห็น Activity และ Fragment ของแต่ละหน้า ซึ่งจำนวน code ในแต่ละ Activity เยอะใช้ได้เลย

สิ่งที่ชอบมาก ๆ ของ App นี้คือ

มีชุดการทดสอบที่เยอะใช้ได้เลย
ซึ่งอยู่ใน AndroidTest ทั้งหมด ประกอบไปด้วย

  • Unit test
  • Integration test ผ่านการ Mock หรือ Test double เช่น Database และ HTTP connection
  • Activity test ผ่าน Instrument testing ของ Android ซึ่งมีอยู่เพียง 2 test case

โดยเราสามารถนำมาศึกษาวิธีการเขียนได้

และเมื่อนำ source code มาวิเคราะห์ด้วย SonarQube ได้ผลดังนี้
ซึ่งเราสามารถเข้าไป contribute ได้อีกเยอะครับ

simplenote-sonar

Reference Websites
https://simplenote.com/2016/08/11/ios-android-and-macos-apps-now-open-source/
https://github.com/Simperium/simperium-android

Tags: