- Kotlin
- MVVM
- Retrofit
- Room
- Hilt
- Glide
testtask-recipeapp's Introduction
testtask-recipeapp's People
testtask-recipeapp's Issues
Code review
-
Достаточно большие функции
onViewCreated
в классах фрагментов. Эта функция, по сути, является точкой входа исполнения твоей логики во фрагменте, поэтому желательно делать эти функции максимально короткими и разбивать на функции поменьше. -
Встречаются куски с достаточно большой воложенность. Если вложенность становится больше 3, то стоит задуматься над переносом внутренней логики в отдельную функцию
-
collect'ы лучше обрабатывать в классах ViewModel'ей, так как бОльшая часть логики должна находится именно там. Классы View должны отвечать в основном только за отображение данных.
-
Попадаются "магические константы". Их лучше выносить в отдельные переменные если они повторяются несколько раз, так как если придется их поменять, то придется искать по всему проекту и менять их.
-
Есть повторяющиеся куски кода, к примеру загрузка изображения через Glide. Лучше такие куски кода выносить в отдельную утилиту или экстеншн и потом переиспользовать во всем проекте
-
Транзакции в бд лучше делать в самом
Dao
классе. Так и логика добавления будет в одном месте и можно будет сразу передавать только нужныйDao
в класс репозитория, а не весьRecipeDatabase
-
Не очень ясна необходимость в
PreferencesManager'е
. Первое на что хотелось бы обратить внимание, это то, что для хранения сортировки вполне достаточно хранить и обновлять в нужной вью модели. Второе, если всё же и использовать preferences, то сами они больше относятся к логикеdata
, поэтому желательно и хранить их в соответсвующей директории. Тоже касается иnetworkBoundResource
. Он используется для работы сdata
сущностями, получением запросов с сервера и обращению к бд, поэтому его нахождение внеdata
немного выбивается. -
Лишняя вложенность в xml файле с деталями фрагмента. Можно было оставить либо только
LinearLayout
, либоConstraintLayout
у ScrollView чайлда -
Лучше давать названия классам исходя из того, для чего они нужны. К примеру название
ViewPagerAdapter
не дает информации для чего конкретно нужен данный класс. Лучше переименовать примерно какImagesAdapter
илиImageViewPagerAdapter
. Тоже касается и его вьюхолдера -
Чтобы избежать лишней вложенности в функциях, в которых почти постоянно используется один элемент, можно писать конструкцию
fun sth() = with(useditem) {...}
. Важно заметить, что при такой записи будет возвращаться результат последней строчки этой функции
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.