インタフェースを活用して多数のapiを処理
会社でコードを作成し、修正が完了した後はgitにPull requestを出します。
このコードを他のチームの同僚たちが確認して問題がないか検討します。
私も他人のコードを確認したりしますが、これを見ながら勉強になった場合が たくさんありました。
最近見たのはinterfaceを活用したものです。
普通 android では View Model を通じて一つのapi をもらって処理します。
簡単なView変更の場合はLive Dateに入れてすぐbindingを通じてxmlでデータ
を参照するようにします。
今回は、複数のデータを参考に、最終的に表示するかどうかを検討し、
これをViewに表示します。
Modul <-> interface <-> ViewModel <->Xml
1. Get Menu Visibility インタフェース専用クラスを作り、複数のデータの値を通じて表示するかどうかに対するロジックを作成します。
val deferredMemInfo = async { gateway.getMemInfo(encryptedUniversalCustomerId) }
val deferredCoinMemInfo = async { gateway.getCoinMemInfo(encryptedUniversalCustomerId) }
MenuVisibility(
showsSmsAuthentication = !isSmsRegistered,
showsSmsUpdate = isSmsRegistered,
showsModifyBirthdayMenu = showsModifyBirthdayMenu
)
2. 上のインターフェースはprovideGetMenuVisibilityGateway(DomainModule)と接続し、それぞれrepositoryを通じてapiと接続
@Provides
fun provideGetMenuVisibilityGateway(
coinMemInfoRepository: CoinMemInfoRepository,
memInfoRepository: MemberInfoRepository
): GetMenuVisibility.Gateway {
return object : GetMenuVisibility.Gateway {
override suspend fun getMemInfo(encryptedUniversalCustomerId: String): GetMenuVisibility.MemInfo {
val data = memInfoRepository.getMemberInfo(encUniCstId = encryptedUniversalCustomerId)
return object : GetMenuVisibility.MemInfo {
override val birthday: String? = data?.birthday
override val memberLevel: String? = data?.memberLevel
}
}
}
3. ViewModelでGetMenuVisibilityを接続
4. apiから受け取った値は集めて(async)ライブデータに保存
private val _menuVisibility = MutableLiveData<MenuVisibility>()
val menuVisibility: LiveData<MenuVisibility>
get() = _menuVisibility
5. これをバインディングを通じてxmlからすぐにviewに適用
この記事が気に入ったらサポートをしてみませんか?