В методе несколько лямбд. Не всегда понятно, какие именно лямбды надо передать, чтобы логика правильно отработала

Всем привет! Я новичок в Андроиде, и мне очень нужна ваша помощь. Методу передаются аргументы-лямбды, их количество постепенно растет - switchToTab, updateContent, addProductsToCart. Набор аргументов, которые надо передать, всегда зависит от передаваемого DetailsModel. Необходимо переработать api метода или вынести в какой-нибудь отдельный класс. Можно передать все лямбды при переходе на любой из экранов. Как это сделать? Помогите, пожалуйста.

 protected fun routing(
        detailsModel: DetailsModel?,
        router: AppRouter,
        switchToTab: (tab: RootTab) -> Unit = {},
        updateContent: (contentId: Long) -> Unit = {},
        addProductsToCart: (items: List<CartProductChange>, promocode: String?) -> Unit = { _, _ -> }
    ) {
        detailsModel?.let { details ->
            Timber.d("routing: $details")
            when (details.routeType) {
                is DetailsModel.RouteType.Category -> {
                    router.navigateTo(
                        CatalogScreens.Products(
                            childCatalogId = details.routeType.childCategoryId,
                            productsType = ProductsType.Category,
                            routerName = router.name,
                            categoryTitle = details.title
                        )
                    )
                }
                is DetailsModel.RouteType.Promo -> {
                    router.navigateTo(
                        CatalogScreens.Products(
                            childCatalogId = details.routeType.promoId,
                            productsType = ProductsType.Promo,
                            routerName = router.name,
                            categoryTitle = details.title
                        )
                    )
                }

Посмотрите, пожалуйста, верно ли я создаю класс?

class Routing{

    val detailsModel: DetailsModel? = null
    val router: AppRouter
        get() {}
    fun switchToTab (tab: RootTab){}
    fun updateCorner (cornerId: Long){}
    fun addProductsToCart (items: List<CartProductChange>, promocode: String?){}
}

Ответы (1 шт):

Автор решения: Георгий Чеботарев

я бы сделал все это все классом. В базовом классе этот вот метод, и 3 абстрактных не определенных метода (либо дефолтных открытых). От базового класса вы наследуете нужное кол-во дочерних классов, и используете их в местах вызова этой функции. Так, вы сможете завести любое кол-во методов, а так же иметь какую-то базовую реализацию (если она нужна) и дополнительно избежите дублирования.

→ Ссылка