インタフェースを活用して多数の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に適用



この記事が気に入ったらサポートをしてみませんか?