Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Честно говоря у меня возникает сомнение в целесообразности применении данной архитектуры даже в средних приложенияхТак приведите аргументы почему?
делал Junior разработчик в небольшом проекте и от этого кода дыбом волосы становилисьА от статей по VIPER у вас волосы дыбом не встают? Вы точно уверены кто там у вас джуниор в команде? Ну и скорее всего ваш джун просто все коряво сделал
В статье есть пример небольшого приложения, опущены только детали реализации UI
Отсутствие проблем с Activty lifecycle, поворотами экрана, упрощение архитектуры и как следствие увеличение понимания системы любым членом команды, уменьшение количества мусорного кода, упрощение поддержки, ускорение и удешевление стоимости разработки для вас нецелесообразно?
А от статей по VIPER у вас волосы дыбом не встают?
Я имел ввиду законченное клиент-серверное приложение среднего масштаба. Например небольшой клиент для GitHub.Если будет свободное время, то выложу конечно
Сильное заявление, проверять я его, конечно, не буду.Аргументация уровня ТНТ
В каком компоненте будет реализована навигация?Что вы имеете ввиду под навигацией? Переходы между Activity? Как правило в Activity. В кейсах когда Activity на экране нет, то подходящий вариант — Application
Я так понимаю, что данные в DataStorage пока не чистятся. В какой момент будет происходит очистка?
Будет ли активность использовать несколько Request и DataStorage для переиспользования кода?Вопрос вообще не очень корректно поставлен. Request\DataStorage — статик классы, вы можете использовать их из любой части приложения. В RESS рекомендуется делать по одному Request и DataStorage на все приложение, и разбивать их на несколько только в случае сильного разрастания их объема(Например, при широком API, или большом разнообразии данных)
Могу ли отменить Request?Опять же, не корректный вопрос. Request — статик класс с набором методов, делающим запросы к REST-API, а не отдельный запрос. Если вы хотели, спросить можно ли отменить запрос посланный к сервису, этого нет в примере, но никаких ограничений архитектура не накладывает.
Как обрабатываются ошибки?Зависит от задач и типа ошибок. Ошибки от сервиса приходят вместе с answer в листенер подписанный на Request. Подписывайтесь где вам удобно и обрабатывайте. Визуальные можете в Activity, с данными в DataStorage, или вообще вынести отдельный статик ErrorHandler. Не думаю что это имеет смысл разжовывать, это очевидно
Я Android разработчик, у нас VIPER не так популярен как на iOS, но благодаря Вам я прочёл одну статью, и на удивление мне всё понятноХорошо. Вот, например, мне не все понятно. Если вы разобрались, распишите почему разбиение одного экрана приложения, даже очень простого, на ~10 сущностей(Router, Configurator, Presenter, Interactor, View и интерфейс к каждому) и файлов некоторые люди, в том числе видимо и вы, считают адекватным инженерным подходом?
но в Java так не пишут, есть устоявшийся стиль форматированияВсю жизнь в джаве скобку на новую строку ставил и никто не умер. В тексте прям чувствуется ваше желание меня поучить. Вы на чем-то кроме джавы писали?
Вы же пишите в топик по Android и должны их в пример приводить, а не VIPER с реализацией под iOSВы видите прям такую принципиальную разницу между этими системами в части реализации архитектуры?
На каждый экран есть View и PresenterПро интерфейс для View не забыли? Итого, классический MVP. По 3 сущности на экран. Уже не 10 конечно, но тоже перебор.
Далее интеракторы и репозитории тоже на всё приложение и разбиты по фичамАга, видимо по одному интерактору и репозиторию на фичу, а фича чаще всего соответствует экрану. Т.е добавили новую фичу, впилили кучу классов и интерфейсов на всех уровнях, и это еще без реализации самой фичи. Это адекватный инженерный подход? Ок
Чувак не может url в конфиг вынести, о чем ещё говорить?)
Если ты не согласен с моим мнением, то удоли статью!Я смотрю вы критику и сами не воспринимаете толком. Вы приводите недостатки кода в конкретном примере. Я же отвечаю что, конкретно к архитектуре большая часть этих недостатков отношения не имеет. Код в статье чтобы показать общую схему работы, а не чтобы его копипастить.
потому что меня сейчас не критикуютКак это? Я вас критикую.
все недостатки имеют отношение к архитектуреРеально? Т.е. если я сейчас перепишу код из статьи на идеальный, оставив ту же архитектуру, вы скажете что недостатки архитектуры исчезли? Браво
«mvp — слишком сложна, я не хачу думать»Думать надо над решением задач, а не над тем как побольше абстракций в архитектуру запихать. MVP — не сложна, а избыточно сложна, дополнительный слой абстракции должен упрощать систему, а в MVP он усложняет, это fail. Ваше поколение почемуто считает, что чем сложнее — тем круче, нет — чем сложнее в архитектуре тем хуже. Сделать просто сложнее, чем сделать сложно. Думать не хочет не тот, кто видит лишнюю сложность, а тот кто усложняет вместо того чтобы подумать и упростить.
Конечно. Обработка нескольких запросов, приходящих в разном неопределенном порядке в любой архитектуре будет выглядеть убого
ваш вариант является самой тупой реализацией
реализация очень тупаяХа-ха, так вот что вы не понимаете, вы считаете что тупо это проблема. Нет, в проектировании систем — тупо это хорошо, чем тупее тем лучше. Вот когда слишком тупо, чтобы решать поставленные задачи — тогда плохо, нужно усложнять.
поучаствуйте в крпных проектах, поймёте недостатки, а сейчас вы мыслите слишком недалёкоЯ учавствовал, и в этих проектах использовали RESS, она прекрасно масштабируется до больших размеров, особенно если головой думать, а не догмам по инструкции следовать. Если в проектах такого масштаба использовать Чистую Архитектуру, там половину времени будет занимать рефакторинг, а IDE от количества файлов повесится просто, не говоря уже о том что размер проекта выйдет за рамки понимания.
ps в чём проблема русскоязычного StackOverflow? комьюнити тупое?Да, именно так. Все, кто могут идут сразу на англоязычный
я говорил, что в мелкие проекты тащить клин не нужноДа, вот только во все свои мелкие и опубликованные проекты клин вы затащили
такие «крупные» проекты на «великой архитектуре ress», которые никто не хочет поддерживать, потому что написано полное и унылое, я тоже видел достаточноОчевидно, у вас пробелы в понимании того, что такое RESS
вы так аккуратно опустили моё замечание про хабр и тостер,Да потому что это замечание ниочем, подкалывать вы не умеете. Русский SO — бедный родственник англоязычного для тех кто не знает английский с аудиторией из вчерашних школьников. А хабр и тостер самодостаточные сайты, если они вам не нравятся, зачем вы тогда тут сидите?
что я тащу в мелкие проекты — это уже моё делоВ любом случае ваши утверждения расходятся с делом. Вы советуете одно, а делаете другое.
вам же не нравится, что сайт русский, так не пишите на русском сайтеПовторите свой, как вам кажется, очень-очень удачный подкол, четвертый раз, может после этого он станет хоть немного остроумным. Я вам на него уже ответил намного больше раз, чем он этого заслуживает.
ибо слишком скудоумныРаз уже перешли на личности, значит точно по существу ответить нечего.
на медиуме пишут умные люди, знающие англ, а все остальные остались на хабреЕсли судить исключительно по вашим комментариям, то такая мысль конечно может придти в голову, да
HttpUrlConnection лучше отказаться.Так я и не против, для примера взял то что под руку подвернулось.
А что с тестированием на моках?А какой в нем смысл? REST-клиент это приложение на 80% состоящее из UI, если и тестировать то UI. А учитывая качество UI-компонентов в Android, то и большая часть багов там. Усложнять код, только для того чтобы протестировать копеечную бизнес логику, не выглядит хорошей идеей
чтобы протестировать копеечную бизнес логику
клиентами могут быть все компоненты кроме Сессии
в Сессию, а та рассылает по своим Вью
RESS — Новая архитектура для мобильных приложений