-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Код ревью #25
Comments
…essary comments and shackbars, Ui states now in ViewModels
…essary comments and shackbars, Ui states now in ViewModels
…ions, CardView animations now have default values
…ions, CardView animations now have default values
…essary comments and shackbars, Ui states now in ViewModels
…ions, CardView animations now have default values
Изменения уже в ветке master.
|
|
Изменения уже в ветке master.
|
|
В Gradle файле модуля App у тебя подключается либа retrofit. Это не правильно, эта либа должна находится только в data модуле. Чтобы нормально использовать при этом di, которая находится в app модуле, нужно в data модуле сделать retrofit creator, который будет создавать объект retrofit'а (в будущем его можно будет еще бафнуть, передавая разные http клиентов и т.п.) и уже его вызывать в koin'е.
Лучше версии библиотек хранить там же, где они и подключаются. Это позволит не переключаться между двумя файлами для обновления версии либы, а также уменьшит список в проектном gradle список, который может быть уж слишком большим и в котором можно будет "заблудиться"
Лучше ссылки на внешние api хранить в BuildConfig'е, просто задав их в gradle файле.
Если в liveDat'у пришла ошибка, то каждый раз, когда человек будет возвращаться на активность (к примеру перешел на другой экран и вернулся) или при смене конфигурации, будет вылетать ошибка (хотя ее на самом деле уже и нет). Для решения таких проблем используются Event'ы (подробнее о них можно почитать тут https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150)
Показывать snackbar когда все хорошо не всегда необходимо. Обычно, при успешном запросе просто показывается контент на экране, без перегрузки пользователя информацией о том, что все хорошо). Также прошу заметить, что если у человека возникла ошибка и он просто прождал несколько секунд, то snackbar с retry исчезнут, и попробовать перезапросить данные (к примеру, если инета не было, а потом появился) не получится уже никак
Комментарии лучше всего в коде писать на английском, такой общепринятый стандарт. И не нужно их так много. Обычно, если код хорошо написан, то он сам говорит о том, что тут происходит) Комментарии нужно оставлять только там, где может быть не совсем ясна логика происходящего, либо просто пояснить некоторые неочевидные моменты.
Вью должна быть максимально "тупой". В ней не должно быть обработки успешного или ошибочного кейса при взаимодействии с флоу. Обработка этого должна находиться во ViewModel, а в ней уже просто возвращать данные во фрагмент, где они должны быть отражены
Состояния фрагмента должны находится во viewModel'и. Так, даже при пересоздании фрагмента или activity все данные сохраняться и экран нормально после этого отобразиться. Поэтому состояния экрана по типу "идет загрузка, ошибка, контент" и т.п. должны быть именно во viewModel.
Общение между модулями должно происходить только с использованием интерфейсов (буковка L в SOLID'е). Так, можно будет поменять только класс реализации, передаваемый в необходимый класс, без внесения изменений в куче других мест. Сейчас же в твоей реализации UseCase'ы это просто отдельные классы, без наследования от какого-либо интерфейса. Взаимодействие
domain
иdata
слоя у тебя реализовано правильноДиректория
util
не совсем правильно названа. В ней у тебя находятся только функции расширения. Лучше ее тогда так и назватьextentions
CardView
атрибуты для анимации лучше всего объявить как входные данные в функцию, потому что может быть ситуация, когда придется поменять, к примеру, длительность анимации. А чтобы их постоянно не писать просто задать начальные значения. И также их стоит вынести в отдельные переменные, так как они повторяются минимум 2 раза в этом файлеAndroid устройства бывают разные по размеру, поэтому НЕ векторные картинки нужно хранить в 6 форматах, чтобы они отображались "не шакально". Можно об этом почитать тут https://developer.android.com/studio/write/resource-manager
Если используешь
ConstraintLayout
, то лучше всегда вместоmatch_parent
указывать0dp
. Очень редко, но бывают такие случаи, когдаmatch_parent
задает некорректное поведение у вью внутриConstraintLayout
.domain
модуль лучше классы разбивать на отдельные фичи, как это сделано вpresentation
. С ростом проекта будет все больше и больше useCase'ов, и отыскать нужные в одной директории будет невозможноСтроковые значения, такие как "temp, humidity, speed" и т.п. можно задать enum class'ом, где будет браться просто название класса с переводом его в lowerCase. Это позволит спокойно использовать этот класс и в других местах, если это понадобится, а так же соберет все воедино; не придется искать по разным классам такие строки и менять их
toBriefWeatherInfo
примерно такой же подход, как и было описано выше, только наоборот. У enum class'а есть методvalueOf(String)
, который вернет enum объект по имени. Можно написать функцию, которая поменяет все пробелы на _ и переведет строку в старшему регистру. Это позволит при добавлении новых элементов добавить их только вenum class
, а остальной код не трогатьThe text was updated successfully, but these errors were encountered: