Это мини-серия статей по написанию поддерживаемого объектно-ориентированного кода без лишней нервотрепки.
Предыдущие части: Часть 1, Часть 2, Часть 3.
Создание
Обычно мы создаем объекты в одном месте. Это может быть конструктор, «Строитель», метод «Статичной фабрики», «Абстрактной фабрики» или любой другой шаблон.
Бывают случаи, когда объекты, созданные фреймворком, требуют некоего дополнительного состояния, которое потребуется установить. Яркий пример тому — классActivity
в Android. Этот класс создается Android-фреймворком. Мы можем только добавлять атрибуты через Intent
.
DRY
Долгое время, запуская активности и прописывая дополнения, я добавлял комментарий в начале классаActivity
и указывал, что все дополнения нужны для правильного запуска Activity
. Получалось нечто подобное:
По мне так такие комментарии служили отличной документацией. Мне приходилось запускать TargetActivity
из различных точек входа многих классов и везде прописывать startActivity(intent)
. Это нарушало принципы DRY: Don’t Repeat Yourself («Не повторяйся»).
По мере роста команды и разрастания базы кода с этим классом может произойти что угодно:
- дополнений станет больше;
- комментарии перестанут совпадать с новыми дополнениями;
- ваша команда забудет передать какие-то дополнения;
- вы забудете добавить новые дополнения в старые вызовы.
Статичный запуск
Чтобы не разочароваться при запуске приложения, лучше сразу определять все привязки внутри целевого класса. Для этих целей отлично подходит статичный метод запуска:
В Android Studio для этих целей есть предустановленный шаблон:
Так я смог избежать путаницы при поддержке проекта в 150 тыс. строк за 3 года.
Перевод статьи Arun Sasidharan: Object Oriented Tricks: #4 Starter Pattern -Android Edition