Android Architecture Components — Part5 : Addendum

Dew
Black Lens
Published in
2 min readJun 20, 2017

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

--

--