Size: a a a

Flutter Developers — русскоговорящее сообщество

2021 February 22

Ю

Юра in Flutter Developers — русскоговорящее сообщество
@PlugFox Мне тут в соседнем чате сказали, что с тобой можно похоливарить) Можно, конечно, в личке пообщаться, но публично может быть даже интереснее. В общем, я думаю использовать ли в моём следующем проекте https://pub.dev/packages/get
В качестве критики мне скинули вот это: https://youtu.be/AV_4aVOKl-g?t=11211 (там есть тайм тег про GetX).

Я же смотрю на это немного по-другому.

Да, это микро-фреймворк. За 7 лет опыта разработки для Android я пришёл к тому, что создал для себя некое подобние микро-фреймворка для Android, но это лишь солянка из различных библиотек, каким-то образом собранных под одной крышей. Get делает то же самое для Flutter вместо меня.

Например, в Android для навигации я использую Cicerone, который прячу за интерфейсом Router’а. Выглядит это приблизительно вот так:

class MyViewModel(
 …,
 router: MyRouter,
): ViewModel {
 …

 fun onCreateOrderClicked() {
   router.goToCreateOrder()
 }
}

interface MyRouter {
 fun goToCreateOrder()
}

class DefaultMyRouter(
 private val ciceroneRouter: CiceroneRouter,
 private val screenFactory: ScreenFactory,
): MyRouter {
 override fun goToCreateOrder() {
   ciceroneRouter.navigateTo(screenFactory.createOrder())
 }
}


Как видно, всё это работает через DI. И по факту у меня где-то в памяти есть объект Cicerone, в который то ставится, то убирается Navigator. В данном случае для Flutter + GetX это можно адаптировать таким образом:

class MyController {
 MyController(this._router);

 final MyRouter _router;

 void onCreateOrderClicked() {
   _router.goToCreateOrder();
 }
}

abstract class MyRouter {
 void goToCreateOrder();
}

class DefaultMyRouter implements MyRouter {
 void goToCreateOrder() {
   Get.toNamed(Routes.CREATE_ORDER);
 }
}

Всё то же самое, только мне не надо городить кучу кода для сохранения Navigator’а, Get это делает за меня.

По DI. Для Android я использую Koin, мне он кажется намного приятнее Dagger’а, хоть и имеет свои недостатки. Многие (в том числе Jake Wharthon) говорят что Koin – это не DI, а Service Locator. Тут я не соглашусь) Почему – потому что Service Locator можно использовать для DI по определению, я на Habr’е даже статью написал: http://habr.com/ru/post/488072

Так вот, использование Get в качестве DI-решения почти не отличается от Koin:


// Koin:
val MyModule() = module {
 viewModel { MyViewModel(router = get()) }
 factory { DefaultMyRouter(ciceroneRouter = get(), screenFactory = get()) } bind MyRouter::class
}

// Get:
class MyBinding extends Bindings {
 @override
 void dependencies() {
   Get.lazyPut<MyRouter>(
     () => DefaultMyRouter(),
   );
   Get.lazyPut<MyController>(
     () => MyController(Get.find<MyRouter>()),
   );
 }
}

А почему критикуют Get’s State Management мне вообще непонятно)
источник

Ю

Юра in Flutter Developers — русскоговорящее сообщество
Если кто ещё хочет подискутировать – я за)
источник

ND

Nikolajs Djačenko in Flutter Developers — русскоговорящее сообщество
Это такая сложная реклама поста на хабре?
источник

Ю

Юра in Flutter Developers — русскоговорящее сообщество
Удалил ссылку на Хабр, чтобы так не казалось)
источник

t

tdesc in Flutter Developers — русскоговорящее сообщество
@stilbon как с диплинками быть и роутером? хочется навигатор 2.0 иметь
источник

ND

Nikolajs Djačenko in Flutter Developers — русскоговорящее сообщество
Юра
Удалил ссылку на Хабр, чтобы так не казалось)
Да я же пошутил, что вы 😅
источник

t

tdesc in Flutter Developers — русскоговорящее сообщество
Юра
Удалил ссылку на Хабр, чтобы так не казалось)
верни ссылку то
источник

Ю

Юра in Flutter Developers — русскоговорящее сообщество
tdesc
верни ссылку то
Вернул
источник

t

tdesc in Flutter Developers — русскоговорящее сообщество
Юра
Вернул
спс, давай за диплинки расскажи что думаешь
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Юра
@PlugFox Мне тут в соседнем чате сказали, что с тобой можно похоливарить) Можно, конечно, в личке пообщаться, но публично может быть даже интереснее. В общем, я думаю использовать ли в моём следующем проекте https://pub.dev/packages/get
В качестве критики мне скинули вот это: https://youtu.be/AV_4aVOKl-g?t=11211 (там есть тайм тег про GetX).

Я же смотрю на это немного по-другому.

Да, это микро-фреймворк. За 7 лет опыта разработки для Android я пришёл к тому, что создал для себя некое подобние микро-фреймворка для Android, но это лишь солянка из различных библиотек, каким-то образом собранных под одной крышей. Get делает то же самое для Flutter вместо меня.

Например, в Android для навигации я использую Cicerone, который прячу за интерфейсом Router’а. Выглядит это приблизительно вот так:

class MyViewModel(
 …,
 router: MyRouter,
): ViewModel {
 …

 fun onCreateOrderClicked() {
   router.goToCreateOrder()
 }
}

interface MyRouter {
 fun goToCreateOrder()
}

class DefaultMyRouter(
 private val ciceroneRouter: CiceroneRouter,
 private val screenFactory: ScreenFactory,
): MyRouter {
 override fun goToCreateOrder() {
   ciceroneRouter.navigateTo(screenFactory.createOrder())
 }
}


Как видно, всё это работает через DI. И по факту у меня где-то в памяти есть объект Cicerone, в который то ставится, то убирается Navigator. В данном случае для Flutter + GetX это можно адаптировать таким образом:

class MyController {
 MyController(this._router);

 final MyRouter _router;

 void onCreateOrderClicked() {
   _router.goToCreateOrder();
 }
}

abstract class MyRouter {
 void goToCreateOrder();
}

class DefaultMyRouter implements MyRouter {
 void goToCreateOrder() {
   Get.toNamed(Routes.CREATE_ORDER);
 }
}

Всё то же самое, только мне не надо городить кучу кода для сохранения Navigator’а, Get это делает за меня.

По DI. Для Android я использую Koin, мне он кажется намного приятнее Dagger’а, хоть и имеет свои недостатки. Многие (в том числе Jake Wharthon) говорят что Koin – это не DI, а Service Locator. Тут я не соглашусь) Почему – потому что Service Locator можно использовать для DI по определению, я на Habr’е даже статью написал: http://habr.com/ru/post/488072

Так вот, использование Get в качестве DI-решения почти не отличается от Koin:


// Koin:
val MyModule() = module {
 viewModel { MyViewModel(router = get()) }
 factory { DefaultMyRouter(ciceroneRouter = get(), screenFactory = get()) } bind MyRouter::class
}

// Get:
class MyBinding extends Bindings {
 @override
 void dependencies() {
   Get.lazyPut<MyRouter>(
     () => DefaultMyRouter(),
   );
   Get.lazyPut<MyController>(
     () => MyController(Get.find<MyRouter>()),
   );
 }
}

А почему критикуют Get’s State Management мне вообще непонятно)
Хочешь - используй.
Я разве запрещаю?
источник

Ю

Юра in Flutter Developers — русскоговорящее сообщество
🅵🅾️🆇
Хочешь - используй.
Я разве запрещаю?
Блин, я на холивар надеялся.
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Юра
Блин, я на холивар надеялся.
Я из рударта ушел не просто так, а чтоб не тратить время на ерунду и людей, что не хотят учиться.
источник

Ю

Юра in Flutter Developers — русскоговорящее сообщество
Какой ты нежный мальчик, Томми)
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Хочешь знать за проблематику своих решений - смотри мои стримы.
В противном случае лучше поищи в рударте когонить под стать, чтоб обсуждать такие вопросы.
источник

Ю

Юра in Flutter Developers — русскоговорящее сообщество
Я надеялся на конструктивную дискуссию, а ты сливаешься.
источник

AK

Anton Karpov in Flutter Developers — русскоговорящее сообщество
Юра
Я надеялся на конструктивную дискуссию, а ты сливаешься.
.
источник

AK

Anton Karpov in Flutter Developers — русскоговорящее сообщество
Юра
Блин, я на холивар надеялся.
.
источник

AK

Anton Karpov in Flutter Developers — русскоговорящее сообщество
Показания не сходятся)
источник

Ю

Юра in Flutter Developers — русскоговорящее сообщество
В спорах рождается истина, холивар тоже своего рода спор) На самом деле я правда хотел конструктивной критики своего подхода. Значит подход не так уж и плох, да, @PlugFox?) Иначе ты бы сразу указал на недочёты.
источник

T

Tim in Flutter Developers — русскоговорящее сообщество
Может он приболел?)
источник