Size: a a a

Android Architecture

2020 August 10

KD

Konstantin Dovnar in Android Architecture
Aleksey D.
с самого начала можно так делать, есичо
С какого самого начала? С 3'го андроида? Круто. Жаль, что при пересоздании он там вызывал пустой конструктор и хер хотел класть на то, что ему передали до этого.
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
С каких пор можно передавать зависимости через конструктор?
Вернее, с каких пор так стоит делать?
Насколько я помню, при пересоздании фрагмента он все эти зависимости потеряет.

В целом, у меня обычно фрагменты это полноценные экраны => стартовая точка для чего-то. Не считаю чем-то ужасным оттуда напрямую получать зависимости из SL и передавать дальше куда нужно.

Но да, если заниматься декомпозицией фрагментов разбивая их на мелкие, то передача в конструкторе нужна. Иначе это будет адом.
Однако этот подход уже вполне вписывается в "упарываться", т.к. он существенно сложнее.

Но ещё раз — моя мысль лишь в том, что выбирая между фрагментами и активити (в плане использования в виде полноценного экрана) — это выбор между сегодняшней кучей дерьма и вчерашней.
Можно передать функцию, возвращающую зависимость. Или Lazy<>. В любом случае сам фрагмент решает как ему нужно поставлять зависимости, лениво или нет. А сервис локаторы в Андроид - это костыль из-за былого отсутствия DI.
источник

Sergey λ in Android Architecture
Konstantin Dovnar
С какого самого начала? С 3'го андроида? Круто. Жаль, что при пересоздании он там вызывал пустой конструктор и хер хотел класть на то, что ему передали до этого.
С момента когда завезли FragmentFactory
источник

KD

Konstantin Dovnar in Android Architecture
Sergey λ
С момента когда завезли FragmentFactory
Ох, да, видел.
Такой же ужас как и у гугловых же VM.
Все эти проверки на классах, бр.
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Добром это могло было бы быть, если бы он — ЖЦ — был очевидным и простым. А он, как и у активити, пизданутый:)

Разумеется у него есть какие-то преимущества, но это не что-то, что делает фрагменты лакомым кусочком.
Наличие жц как такового - это особенность ОС, здесь ничего не поделать. А вот расширенный жц фрагментов по сравнению с Активити - это улучшение. Я бы сказал, что жц Активити ограниченный и не позволяет уничтожать представление, когда Активити в стеке. Там может быть жирная вьюха с картинкой, например.
источник

AD

Aleksey D. in Android Architecture
Konstantin Dovnar
С какого самого начала? С 3'го андроида? Круто. Жаль, что при пересоздании он там вызывал пустой конструктор и хер хотел класть на то, что ему передали до этого.
а кто мешает в конструкторе с параметрами создавать аргументы?)
источник

KD

Konstantin Dovnar in Android Architecture
Arkadii Ivanov
Можно передать функцию, возвращающую зависимость. Или Lazy<>. В любом случае сам фрагмент решает как ему нужно поставлять зависимости, лениво или нет. А сервис локаторы в Андроид - это костыль из-за былого отсутствия DI.
Если речь о том, чтобы передавать аргументы через фабрики — то по мне это куда более неприятный в использовании костыль.

К слову, SL такой же IoC. Костылём его называть довольно странно. Костыль в данном случае именно со стороны фреймворка, что он вынуждал использовать только такой подход.
С которым, кстати, никаких проблем нет.
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Если речь о том, чтобы передавать аргументы через фабрики — то по мне это куда более неприятный в использовании костыль.

К слову, SL такой же IoC. Костылём его называть довольно странно. Костыль в данном случае именно со стороны фреймворка, что он вынуждал использовать только такой подход.
С которым, кстати, никаких проблем нет.
Это вынужденная мера была, потому что по-другому было никак. В обычные классы вы же через конструктор передаёте аргументы? А если надо лениво то есть Lazy. Фрагменты в этом случае не исключение больше.
источник

KD

Konstantin Dovnar in Android Architecture
Aleksey D.
а кто мешает в конструкторе с параметрами создавать аргументы?)
Не пробовал и смысла вижу в этом мало. Никакого преимущества от банального newInstance нет, разве что синтаксически кому-то приятнее вызвать конструктор.
источник

AI

Arkadii Ivanov in Android Architecture
В общем чего тут спорить. Как нравится, так и делайте)
источник

KD

Konstantin Dovnar in Android Architecture
Arkadii Ivanov
Это вынужденная мера была, потому что по-другому было никак. В обычные классы вы же через конструктор передаёте аргументы? А если надо лениво то есть Lazy. Фрагменты в этом случае не исключение больше.
Я уже выделил выше, что если речь о полноценном экране на фрагменте, то это стартовая точка. Никакой проблемы в том, чтобы в стартовой точке получить аргументы через SL и передать их дальше я не вижу.
источник

KD

Konstantin Dovnar in Android Architecture
Городить лишние классы (фабрики) ради того, чтобы просто дальше пробросить аргументы — такой же оверхед, как и миллион абстракций.
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Я уже выделил выше, что если речь о полноценном экране на фрагменте, то это стартовая точка. Никакой проблемы в том, чтобы в стартовой точке получить аргументы через SL и передать их дальше я не вижу.
Как Вам будет угодно. У меня нет цели Вас переубедить.
источник

KD

Konstantin Dovnar in Android Architecture
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Городить лишние классы (фабрики) ради того, чтобы просто дальше пробросить аргументы — такой же оверхед, как и миллион абстракций.
Есть Lazy. Просто передайте зависимость как repository: Lazy<Repository>.
источник

KD

Konstantin Dovnar in Android Architecture
Arkadii Ivanov
Есть Lazy. Просто передайте зависимость как repository: Lazy<Repository>.
Передумали? Или я что-то отвечу и "а всё, поздно уже"?
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Передумали? Или я что-то отвечу и "а всё, поздно уже"?
Что передумал?
источник

KD

Konstantin Dovnar in Android Architecture
Arkadii Ivanov
Что передумал?
>В общем чего тут спорить. Как нравится, так и делайте)
>Как Вам будет угодно. У меня нет цели Вас переубедить.
>Пишу ещё сообщение
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
>В общем чего тут спорить. Как нравится, так и делайте)
>Как Вам будет угодно. У меня нет цели Вас переубедить.
>Пишу ещё сообщение
А ну я просто ответил, что фабрики может не городить)
источник

KD

Konstantin Dovnar in Android Architecture
Arkadii Ivanov
А ну я просто ответил, что фабрики может не городить)
Если есть примеры в открытом доступе — глянул бы. Так сходу не очень понимаю, чем lazy аргумент будет живучее не ленивого.
источник