Это мини-серия статей по написанию поддерживаемого объектно-ориентированного кода без лишней нервотрепки. 

Предыдущие части: Часть 1, Часть 2, Часть 3.

Создание

Обычно мы создаем объекты в одном месте. Это может быть конструктор, «Строитель», метод «Статичной фабрики», «Абстрактной фабрики» или любой другой шаблон.

Telegram-канал по теме
NOP::Nuances of ProgrammingСтатьи и переводы для разработчиков — каждый день
Подписаться

Бывают случаи, когда объекты, созданные фреймворком, требуют некоего дополнительного состояния, которое потребуется установить. Яркий пример тому — класс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

Мы в Telegram — подписывайтесь
NOP::Nuances of ProgrammingСтатьи и переводы для разработчиков — каждый день
Подписаться
NOP::HumorИТ-юмор и мемы о боли разработчиков
Подписаться
NOP::Recruiter RemoteУдалённые ИТ-вакансии с вилками
Подписаться
Предыдущая статьяCтарая поговорка гласит: “Одна голова хорошо, а две — лучше”
Следующая статья12 UI Grid-систем и библиотек для React актуальных в 2019 году