Для любознательных: синглтоны
Шаблон синглтон, используемый в
CrimeRepository
— это
очень распространенное явление в Android. У синглтонов
(одноэлементных классов) не очень хорошая репутация,
потому что их часто неправильно используют, портя тем
самым обслуживаемость приложения.
Синглтоны часто используются в Android, потому что они
живут дольше, чем фрагмент или activity. Синглтон продолжает
существовать после вращения и переключения между разными
activity и фрагментами в приложении.
Синглтоны также удобны как владельцы ваших объектов
модели. Представьте себе более сложное приложение
CriminalIntent с большим количеством activity и фрагментов
для модификации преступлений. Когда один контроллер
модифицирует преступления, как убедиться, что обновленное
преступление было направлено на другие контроллеры?
Если
CrimeRepository
— владелец преступлений и все
модификации преступления проходят через него, вносить
изменения становится гораздо проще. При переключении
между контроллерами вы можете передать ID преступления в
качестве идентификатора конкретного преступления и
заставить каждый контроллер забирать преступление целиком
из
CrimeRepository
с помощью этого ID.
Однако у синглтонов есть несколько недостатков. У них,
несмотря на возможность хранения данных, ограниченный
срок жизни. Синглтон уничтожается вместе со всеми
переменными экземпляра, так как Android в какой-то момент
после переключения из приложения высвобождает память. То
есть они не подходят для долгосрочного хранения (тут нужна
запись файлов на диск или отправка на веб-сервер).
Синглтоны также затрудняют проведение модульных тестов
(мы поговорим о модульном тестировании в главе 20). Не
существует
хорошего
способа
заменить
экземпляр
CrimeRepository
болванкой. На практике разработчики
Android обычно решают эту проблему с помощью инструмента
под названием инжектор зависимости. Этот инструмент
позволяет объектам быть общими как синглтоны, в то же время
давая возможность заменить их в случае необходимости. Чтобы
узнать больше об инъекции зависимостей, прочитайте раздел
«Для любознательных: управление зависимостями» в главе 24.
И как мы уже говорили, у синглтонов есть потенциал
неправильного использования. Заманчиво использовать их
везде и всюду, потому что они удобны, — вы можете добраться
до них откуда угодно и хранить в них любую информацию,
которую нужно получить позже. Но когда вы делаете это, вы
избегаете ответов на важные вопросы: где используются эти
данные? где эта функция важна?
Синглтоны не отвечают на эти вопросы. В итоге их
повсеместное использование превращает программу в
большую свалку — непонятно, где что находится и зачем.
Таким образом, синглтоны могут стать ключевым
компонентом хорошо спроектированного приложения (при
правильном использовании).
2
Измеритель Браннока — прибор, созданный Чарльзом Бранноком в 1927 году,
для измерения длины стопы
Do'stlaringiz bilan baham: |