ทีมพัฒนา 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 กันบ้าง
- Simperium เป็น service สำหรับจัดการข้อมูลระหว่าง device ต่าง ๆ
- Asynchronous HTTP library สำหรับ Android เพิ่งเคยเห็นเลย ซึ่งทำงานอยู่บน Apache HttpClient
- CWAC AndDown: Markdown Utility Library สำหรับจัดการข้อมูลในรูปแบบ Markdown
- Automatic Track for Android
- App passcode library for Android เพิ่มความปลอดภัยในการเข้าใช้งาน
ภายใน 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 ได้อีกเยอะครับ
Reference Websites
https://simplenote.com/2016/08/11/ios-android-and-macos-apps-now-open-source/
https://github.com/Simperium/simperium-android