Есть один метод обработки событий аля handleAction то это MVI, а если несколько разных методов это MVVM
Вроде же столько статей уже написано, куча докладов, уже вроде как все из этой темы высосали, но нет же до сих пор у многих какое-то странное представление о разнице этих двух подходов.
Поэтому попробую объяснить… Вот у вас есть ViewModel, вы используете MVVM и решили, сейчас я добавлю единый state и у меня будет MVI. Нет не будет, у вас будет MVVM просто с единым state вместо нескольких полей, вот и все.
Главных отличий MVVM от MVI 2: реактивный подход для обработки событий, и state который меняется последовательно и только в одном месте.
Реактивный подход означает, что вы не просто делаете большой switch и в зависимости от action вызываете те или иные функции. Вы этот action отправляете в очередь, где он уже позже обработается. В этом и проявляется реактивность, мы обрабатываем все поступившие action по очереди, друг за другом, и прикладываем к обработке текущий state, но об этом далее.
Ключевое отличие между MVI и MVVM с единым state – изменение этого самого state в одном конкретном месте последовательно. Если у вас несколько мест где меняется state, то вся идея unidirection data flow идет лесом. Если два метода будут одновременно менять state, то он может оказаться в некосистентном состоянии, нет никаких гарантий. Даже если вы поставите lock и в один момент времени state будет менять только один поток, все равно вы не контролируете порядок, это не реактивный подход. Когда по коду раскидано изменение состояние, ты попробуй отдебажить все это дело, когда у тебя куча асинхронщины.
Вся идея именно в том, что action отправляются в очередь, накладываются на текущий state, генерируется новый state в одном месте и все повторяется заново. Поэтому все чуть сложнее чем просто зафигачить один единый state во ViewModel.