Android Architecture Components — Part5 : Addendum
Table of Contents
- Part 1 — Introduction
- Part 2 — Data Layer
- Part 3 — Presentation Layer
- Part 4 — Demo
- Part 5 — Addendum <- You are here
บทเสริม
Dependency Injection
บล็อกนี้ไม่ได้โฟกัสที่เรื่องการทำ Dependency Injection ตรงนี้เป็นการรวบรวม Dagger Module ที่ใช้สร้างส่วนต่างๆ ของแอป Posts Reader ไว้ ซึ่งเปิดดูได้ในโปรเจคจริงเช่นกันครับ
RemoteDataModule
สำหรับสร้าง Retrofit
และ PostsReaderApi
@Module
class RemoteDataModule(val baseUrl: String) { @Provides @Singleton
fun providePostsReaderApi(retrofit: Retrofit): PostsReaderApi
= retrofit.create(PostsReaderApi::class.java) @Provides @Singleton
fun provideRetrofit(): Retrofit = Retrofit.Builder()
.baseUrl(baseUrl)
// ... other Retrofit configurations are omitted.
.build()
}
LocalDataModule
สำหรับสร้าง AppDatabase
และ PostDao
@Module
class LocalDataModule(val context: Context) { private val DB_FILE_NAME = "posts-reader-db" @Provides @Singleton
fun providePostDao(db: AppDatabase): PostDao = db.postDao() @Provides @Singleton
fun provideAppDatabase(): AppDatabase =
Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, DB_FILE_NAME)
.build()
}
PostRepositoryModule
สำหรับการสร้าง PostRepository
@Module
class PostRepositoryModule { @Provides @Singleton
fun providePostRepository(localSource: PostDao, remoteSource: PostsReaderApi): PostRepository
= PostRepository(localSource, remoteSource)
}
เพิ่มเติมเกี่ยวกับการปรับปรุงแอป Posts Reader
Network Status
ในแอปตัวอย่าง Posts Reader เพื่อความง่ายผมไม่ได้มีการแสดงสถานะการดึงข้อมูลไว้ แต่ถ้าเราอยากเพิ่มผมทิ้งเป็นไอเดียไว้ให้ว่าเราสามารถให้ Repository รีเทิร์นค่าเป็น Data class ที่มีทั้ง Post และ Loading status ไว้ในนั้นก็ได้ ไม่ได้ยากครับ หรือจะลองศึกษาวิธีการแบบใน document ของ Google ก็ได้
Cache Improvement
ในแอปตัวอย่าง Posts Reader ถ้าดูโค้ดในส่วนของ ViewModel จะพบว่า ViewModel แต่ละตัวจะทำหน้าที่ cache ข้อมูลไว้ให้ เพื่อที่ทุกครั้งที่ Activity เกิดการ re-create ขึ้นมาจะได้ไม่ต้องไปโหลดข้อมูลใหม่จาก repository อีกครั้ง ซึ่งวิธีนี้เป็นวิธีแบบง่ายๆ ในแอปจริงเราอาจจะทำ cache ที่ Repository ซึ่งอาจจะมีลอจิกที่ซับซ้อนกว่าเช่นมีการกำหนดอายุของ cache เป็นต้น
Where to go from now ?
บทความชุด AAC นี้เป็นแค่การแนะนำการวาง Architecture ด้วย AAC แบบพื้นฐานเท่านั้นนะครับ AAC ยังมีอย่างอื่นให้เล่นอีก และในขณะที่เขียนอยู่นี้ตัว AAC ก็ยังคงเป็นเวอร์ชัน Alpha อยู่ ยังไงก็ลองศึกษาเพิ่มเติมทั้งเรื่อง AAC และไลบรารีตัวอื่นๆ ได้ครับ ผมใส่ลิงค์ไปยังแหล่งข้อมูลอื่นๆ ที่น่าสนใจไว้ให้ตรงนี้นะครับ ถ้าชอบบล็อกนี้ก็อย่าลืมแชร์หรือกดหัวใจ และอย่าลืมติดตามบล็อกอื่นๆ จากทางทีมงาน Black Lens ต่อไปด้วยนะครับ สวัสดีครับ
Android Architecture Components
บล็อกเกี่ยวกับ Kotlin จาก Black Lens
GOTO 2016 • Exploring RxJava 2 for Android • Jake Wharton
บล็อกเกี่ยวกับ RxJava จาก Black Lens
Retrofit
The Future of Dependency Injection with Dagger 2 by Jake Wharton
Mockito