Неплохое видео, но осталось какое-то количество вопросов после просмотра. 1. сомнительное утверждение что надо показывать всё что ты знаешь и умеешь. Разве суть задачи не в том, чтобы решить ее максимально оптимальным способом? 2. По поводу разделения слоёв, разве переименование файлов как и работа с файловой системой в целом можно 100% отнести к бизнес логике? 3. если говорить про платформонезависимый код, то очень странно говорить что вполне нормально использовать R класс в таком коде. Да он автогенерируемый и это просто набор интов, но почему он должен быть вообще? А FileRenamer так и продолжает его использовать. 4. Продолжение п.2 но с сущностями Resource, почему используются Int значения в качестве идентификатора ресурса? Откуда уверенность в том, что айди будет именно интом? 5. Самый главный вопрос, почему решение 2 в данном случае хуже чем решение 3? У нас и там, и там есть какой-то класс для предоставление строки из ресурсов. В обоих случаях нам надо писать платформозависимый код для получение ресурсов из конкретной платформа, только в решении 2 это минус, а в решении 3 мы не говорим что это минус. 6. Почему мы говорим что решение 3 более гибкое за счёт того, что мы добавили переменную с ресурсом в сигнатуру метода? В данном конкретном случае у нас не просто переименование файла, т.е. мы не просто меняем имя файла на значение из ресурсов. У нас идёт добавление префикса и это выглядит как более специфическая и узкая задача. Нужна ли нам эта псевдогибкость с параметром префикса вообще? 7. Ну и как уже писали под оригинальным заливом и тут тоже, куда лучше и гибче использовать какие-то константы(енамы, что угодно) и маппер на ресурсы уже непосредственно в UI классе, чтобы что-то рисовать на UI. Как по мне решение 2 сильно лучше чем решение 3 с точки зрения KISS.
1. сомнительное утверждение что надо показывать всё что ты знаешь и умеешь. Разве суть задачи не в том, чтобы решить ее максимально оптимальным способом? Показал несколько подходов, которые видел как решение
Повторюсь еще раз. Зачем все эти доп провайдеры и прочее в бизнес логике? Не правильней было бы: на бизнес слое оперировать модельками бизнес слоя, а в ui уже мапить в строки и прочее, таким образом бизнес логика ничего не знает и не должна знать о строках на ui.
Если речь про то чтобы достать строку, чтобы потом отобразить ее на ui, то соглашусь, использование провайдеров для получения строки из ресурса в бизнес логике - зачастую лишнее. Тем более что если делать это неправильно, то при смене языка на телефоне, текст на экране не сменится. Однако если текст будет использоваться, не для отображения UI, а для каких-либо дальнейших вычислениях, то я не вижу другого выхода. Тот же пример из видео. Как взять новое название файла без констант и провайдеров? Работа с файлами это явно не то, что хочется делать на UI слое.
@@hievery9678 по второй части - можно передать текст через параметры функции, например, если название файла задаётся на ui в каком-нибудь поле ввода, то дальше можно прокинуть в бизнес слой с помощью параметров функции.
@@hievery9678 Мне кажется, наиболее подходящее решение - воспринимать R класс как принадлежащий только UI слою, а нужные для бизнес-логики стринги прописывать константами.
@@A-pe5yy Если надо писать название файла в UI, то да, тут без вопросов. Но придет требование чтобы например какие-нибудь бэкап файлы сохранились в локали пользователя и вот уже нет пользовательского поля. Но это уже конечно уж очень редкий случай, в большинстве случаев ресурсы в бизнес логике не нужны
@@captainsustain Будет работать, да. Но ровно до тех пор, пока заказчики не скажут, что нужны локализованные строки в той части бизнес логики о которой мы говорим :) Но как я уже писал на другой коммент, это очень редкий юзкейс и в реальности почти всегда локализованные строки в бизнес логике действительно не нужны.
Лет 10 назад ещё придумали рабочую активити, сервис или аппликейшн наследовать от resourse manager интерфейса и так инжектить. В контексте выполенения работает на ура
Не понятно почему вариант с вынесением получения платформозависимого кода из вне вообще не рассматривался. Хотелось бы узнать причину. В видео не раскрыто почему аннотации Res не являются чисто андроидовскими: они есть и на других платформах тоже?
эх, столько абстракций, надеюсь, когда-нибудь до меня дойдет зачем это всё и как до этого додумываться самому, а сейчас я бы наверное просто заюзал вариант с константой и прокидыванием строки в параметр функции, а выше уже где-то думал как ее туда засунуть
Абстракции - это не страшно и на большом масштабе кода и команды позволяет строить масштабиремый софт и тестировать его. Оптимизиатор кода R8 потом уберет все лишние прослойки и эффект на код будет минимален. Создавать объекты тоже нестрашно - виртуальная машина ART уже давно нацелена на то что постоянно создается много обёектов
Это чтобы проходить собеседования и придерживаться общего стандарта в промышленной разработке, но по факту это все пустая трата времени и быстро и качественно писать андроид приложения можно и без этого, пример - телеграм. Вредные вещи говорю, но как есть 😂 Против толпы и корпората не попрешь в любом случае, а если начнёте разрабатывать что-то своё для себя, когда каждая минута времени на счету, тогда по-настоящему осознаете, что реально важно при разработке, а что нет, тут сразу не захочется половину абстракций городить, потому что ради чего и кого всё это?
🔗 Платная подписка на Boosty abdev.by/oroS и в Telegram abdev.by/lrpW
🔗 Telegram Android Broadcast t.me/+y-LPEB3R5-9mNmRi
✉ Написать Кириллу kirill@androidbroadcast.dev
Огонь, Кирилл, спасибо большое за материал, очень интересно.
Пожалуйста. Всегда приятно когда находит своего зрителя материал
Неплохое видео, но осталось какое-то количество вопросов после просмотра.
1. сомнительное утверждение что надо показывать всё что ты знаешь и умеешь. Разве суть задачи не в том, чтобы решить ее максимально оптимальным способом?
2. По поводу разделения слоёв, разве переименование файлов как и работа с файловой системой в целом можно 100% отнести к бизнес логике?
3. если говорить про платформонезависимый код, то очень странно говорить что вполне нормально использовать R класс в таком коде. Да он автогенерируемый и это просто набор интов, но почему он должен быть вообще? А FileRenamer так и продолжает его использовать.
4. Продолжение п.2 но с сущностями Resource, почему используются Int значения в качестве идентификатора ресурса? Откуда уверенность в том, что айди будет именно интом?
5. Самый главный вопрос, почему решение 2 в данном случае хуже чем решение 3? У нас и там, и там есть какой-то класс для предоставление строки из ресурсов. В обоих случаях нам надо писать платформозависимый код для получение ресурсов из конкретной платформа, только в решении 2 это минус, а в решении 3 мы не говорим что это минус.
6. Почему мы говорим что решение 3 более гибкое за счёт того, что мы добавили переменную с ресурсом в сигнатуру метода? В данном конкретном случае у нас не просто переименование файла, т.е. мы не просто меняем имя файла на значение из ресурсов. У нас идёт добавление префикса и это выглядит как более специфическая и узкая задача. Нужна ли нам эта псевдогибкость с параметром префикса вообще?
7. Ну и как уже писали под оригинальным заливом и тут тоже, куда лучше и гибче использовать какие-то константы(енамы, что угодно) и маппер на ресурсы уже непосредственно в UI классе, чтобы что-то рисовать на UI.
Как по мне решение 2 сильно лучше чем решение 3 с точки зрения KISS.
1. сомнительное утверждение что надо показывать всё что ты знаешь и умеешь. Разве суть задачи не в том, чтобы решить ее максимально оптимальным способом?
Показал несколько подходов, которые видел как решение
Повторюсь еще раз. Зачем все эти доп провайдеры и прочее в бизнес логике? Не правильней было бы: на бизнес слое оперировать модельками бизнес слоя, а в ui уже мапить в строки и прочее, таким образом бизнес логика ничего не знает и не должна знать о строках на ui.
Если речь про то чтобы достать строку, чтобы потом отобразить ее на ui, то соглашусь, использование провайдеров для получения строки из ресурса в бизнес логике - зачастую лишнее. Тем более что если делать это неправильно, то при смене языка на телефоне, текст на экране не сменится.
Однако если текст будет использоваться, не для отображения UI, а для каких-либо дальнейших вычислениях, то я не вижу другого выхода. Тот же пример из видео. Как взять новое название файла без констант и провайдеров? Работа с файлами это явно не то, что хочется делать на UI слое.
@@hievery9678 по второй части - можно передать текст через параметры функции, например, если название файла задаётся на ui в каком-нибудь поле ввода, то дальше можно прокинуть в бизнес слой с помощью параметров функции.
@@hievery9678 Мне кажется, наиболее подходящее решение - воспринимать R класс как принадлежащий только UI слою, а нужные для бизнес-логики стринги прописывать константами.
@@A-pe5yy Если надо писать название файла в UI, то да, тут без вопросов. Но придет требование чтобы например какие-нибудь бэкап файлы сохранились в локали пользователя и вот уже нет пользовательского поля.
Но это уже конечно уж очень редкий случай, в большинстве случаев ресурсы в бизнес логике не нужны
@@captainsustain Будет работать, да. Но ровно до тех пор, пока заказчики не скажут, что нужны локализованные строки в той части бизнес логики о которой мы говорим :)
Но как я уже писал на другой коммент, это очень редкий юзкейс и в реальности почти всегда локализованные строки в бизнес логике действительно не нужны.
Лет 10 назад ещё придумали рабочую активити, сервис или аппликейшн наследовать от resourse manager интерфейса и так инжектить. В контексте выполенения работает на ура
Не понятно почему вариант с вынесением получения платформозависимого кода из вне вообще не рассматривался. Хотелось бы узнать причину.
В видео не раскрыто почему аннотации Res не являются чисто андроидовскими: они есть и на других платформах тоже?
Весь пакет androidx.annotations уже давно KMP
недавно было что-то подобное в желтый банк, жаль раньше не заметил это видео, можно было бы поумничать )
Оттуда и была взята задачка
На junior такие есть вопросы?
Вполне могут быть
эх, столько абстракций, надеюсь, когда-нибудь до меня дойдет зачем это всё и как до этого додумываться самому, а сейчас я бы наверное просто заюзал вариант с константой и прокидыванием строки в параметр функции, а выше уже где-то думал как ее туда засунуть
Абстракции - это не страшно и на большом масштабе кода и команды позволяет строить масштабиремый софт и тестировать его. Оптимизиатор кода R8 потом уберет все лишние прослойки и эффект на код будет минимален. Создавать объекты тоже нестрашно - виртуальная машина ART уже давно нацелена на то что постоянно создается много обёектов
Это чтобы проходить собеседования и придерживаться общего стандарта в промышленной разработке, но по факту это все пустая трата времени и быстро и качественно писать андроид приложения можно и без этого, пример - телеграм. Вредные вещи говорю, но как есть 😂 Против толпы и корпората не попрешь в любом случае, а если начнёте разрабатывать что-то своё для себя, когда каждая минута времени на счету, тогда по-настоящему осознаете, что реально важно при разработке, а что нет, тут сразу не захочется половину абстракций городить, потому что ради чего и кого всё это?
а что за клавиатура? Видео тоже крутое)
Если клавиатура на столе - Logi MX Keyboared
Вчера на ночь посмотрел, что-то на эту тему снилось. Еще раз смотреть?
Перезалив вынужденный был, а может и знак
Ну, для запоминания как раз лучше вечером перед сном и утром после сна
А что делать, если для условных Prefereces для самого их создания нужен контекст? Это же по идее data слой, но туда обычно не хотят контекст закинуть
Туда обычно же application context как раз и закидывают )
Где-то создают экземпляр, обычно в DI, и другие классы смогут его получить
Я бы просто запросил неизвестный ресурс лямбдой. Такой вариант тут даже не рассматривается.
Это приведет перекладыванию решения на другой класс в цепочке и поиску необходимой строки для показа. Решение рабочее, но не считаю его эффективным
Желтый банк - райф?
Нет )))
перезалив?
Да, перезалив вынужденный
А что случилось с первым?
Удален