Как такой вариант реализации clean architecture + mvvm?

Здравствуйте. Хотел бы попросить у вас совета. Я думал над реализацие clean architecture + mvvm и пришел к варианту.
1) Есть viewModel у нее имплементирую интерфейс назовем его ViewModelObserver и там к примеру будут метод provideList(data: MutableList).
2) В конструкторе ViewModel имеются интеракторы на каждое действие. К примеру InteractorGetList имеет метод execute.
3) Из viewModel вызывается метод execute который передает результат в метод provideList()
4) Проверил через leakCanary утечек не обнаружил.

Исходный код

ViewModel
class FragmentItemsViewModel(
    var testInteractor: TestInteractor
): BaseViewModel(), ViewModelObserver{

    override fun provideData(data: MutableList<String>) {
        var f = 1
        f = 2
    }

    fun doOperation(){
        testInteractor.execute(viewModelScope, this)
    }
}


Interactor
class TestInteractor {

    fun execute(scope: CoroutineScope, observer: ViewModelObserver)= scope.launch{
        var data = withContext(Dispatchers.IO){
            delay(5000)
            return@withContext generateData()
        }

        observer.provideData(data)
    }

    fun generateData(): MutableList<String>{
        val data = mutableListOf<String>()

        for(i in 0..1000)
            data.add(i.toString())

        return data
    }
}


Результат передаю во вью через биндинг+liveData
Пожалуйста подскажите насколько такой подход верен ибо читая статьи понял что вроде и принцип единственной ответственности соблюдается и протестить можно и код читабельный. Есть еще мысль обернуть все useCase(interactors) в класс в котором будут execute методы для каждого из них чтобы легче инжектить было

используя viewModelScope избавлюсь от возможных утечек ибо все в скоупе все куротины отменяются при разрушении viewModel
  • Вопрос задан
  • 346 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы