Всем привет! Хотелось бы узнать ваше мнение насчет того как я пишу код приложений. Прошу строго судить, показать пальцем на все, за что могут бранить на работе, в команде, ну вообщем, по полной. Не знаю можно ли тут так делать, но все же рискну. Код на гитхабе > https://github.com/ATumbler/metropolis/tree/master/server/so. Выложил только то, что меня интересует
Спасибо!
Если идти сверху вниз по коду, то:
1) Массовые беспорядочные импорты (Вам оно всё действительно надо?).
2) Не пользуетесь модификаторами доступа.
3) Не соблюдаете правила именования переменных.
4) Context
в Activity
вынесен зачем-то в поле класса (в случае с Activity не лучше ли использовать this
?).
5) Инициализация List<UserModel> users
вынесена в отдельный метод, когда можно было сделать это сразу же в поле класса, где эта переменная объявлена.
6) Инициализацию UserAdapter adapter
после п.4 казалось бы можно было сделать в поле класса, где эта переменная объявлена, но если хорошо подумать, то вынесена она отдельно, только, чтобы однажды обновить этот адаптер. RecyclerView
вам предоставит адаптер по требованию .getAdapter()
.
7) Некоторые View
вынесены в поля класса, но используются единожды за весь код, а некоторые используются вообще в момент их же инициализации. Например переменная fab_add
инициализируется в onCreate
в одном методе, а используется единожды всё в том же onCreate
, но в другом методе. В данном случае, с опытом предыдущих пунктов, от вынесения кода в методы initViews()
, setupViews()
, initAdapter()
следует отказаться, тогда и переменную fab_add
в поле класса выносить не придётся.
8) Строковые ресурсы принято выносить в отдельный файл string, расположенный в ресурсах проекта.
9) Постоянное создание нового объекта new Handler()
, когда каждая View
содержит в себе Handler
. Возьмите любую из ваших View
, вынесенных в поле класса и скажите ей .post
или .postDelayed
.
10) Постоянное создание объектов на протяжении всего кода.. new Response.Listener()
, new Runnable()
, new Response.ErrorListener()
.. , Вас когда-нибудь проклянёт сборщик мусора. Например разные вариации new Runnable()
, которые, если вглядываться, вероятно часто вызываются. Вот тут как раз стоило бы вынести данные объекты Runnable
в поле класса проинициализировав однажды, после чего взывая к ним.
11) Такой перенос скобок мб и используется в таких языках, как C++
, но в Java
привычнее всё таки фигурную скобку открывать без новой строки. Если к этому поудалять лишние пробелы и учесть предыдущие пункты, то в классе UserActivity
количество строк кода можно будет сократить с 400 до 200-250 (навскидку).
Это я просмотрел только один класс UserActivity
. Остальные смотреть лень :)
Перед критикой: в общем неплохо, я бы даже сказал очень неплохо. Твердая 4.
Теперь критика:
TrigListener
- неужели трудно было назвать TriggerListener
?TriggerListener
сделать публичным внутренним классом TriggerActivity
? Целостность кода не нарушалось быif/else
зря обрамляете фигурными скобкамиprivate
@Override
) - рекомендую присмотреться к ButterKnifepublic class TriggerActivity
extends AppCompatActivity
implements OnClickListener,
TrigListener
я бы написал так:
public class TriggerActivity
extends AppCompatActivity
implements OnClickListener, TriggerListener
Виртуальный выделенный сервер (VDS) становится отличным выбором
На выделенном сервере установил tomcatЗахожу по адресу IP или по домену (установил в server
В теле main запускаю цикл (на 50 итераций), в теле которого вывод текста на экран и вброс команд в потокПри компиляции выводит сперва 50 строк текста...