У меня есть класс GeoFence. Я обсуждаю, должен ли он быть синглом. Мой код работает в любом случае, и я прочитал пару статей и сообщений здесь о SO об этом. Но я не нашел хороших правил, когда правильно использовать синглтон.GeoFenceController с CLLocationManager как singleton?
Я не могу придумать какую-либо причину, которой это не должно быть, и у меня есть несколько причин; классический «должен быть только один!» а также что класс действительно не имеет каких-либо зависимостей, насколько я могу судить, кроме объекта locationManager, который он мог бы создать, так как он не нужен нигде в другом месте, и я не считаю, что какие-либо специальные реализации могли бы когда-либо потребуется. По этой причине я не вижу смысла вводить locationManager. Также необходимо использовать в приложении другой общий экземпляр, который вызывает сервер для извлечения некоторых данных. Самая важная причина сделать это синглтон, я думаю, это то, что он отслеживает контролируемые регионы и хранит некоторые данные, связанные с этим, и некоторые временные метки и другие незначительные вещи в NSUserDefaults. Другой пример класса, который я боюсь, может привести к непоследовательному поведению приложения.
Мой код предназначен для добавления в существующее приложение в качестве расширения.
Я не думаю, что отправка моего кода действительно актуальна, но я кратко объясню, что делает класс: При создании экземпляра он начнет отслеживать местоположение пользователей и продолжит делать это в фоновом режиме. Он запросит список мест с сервера и получит их на основе текущего местоположения устройства. Эти местоположения будут отсортированы и сохранены, а 20 мест, ближайших к устройству, будут отслеживаться для входа. Это в значительной степени основы этого. Geofencing.
Мне бы хотелось, чтобы некоторые аргументы и/или против использования синглтона в этом случае.
Мой руководитель проекта согласен с вами, поэтому я приму этот ответ. Это имеет смысл для меня. Просто все сильные мнения о синглонах могут заставить меня сомневаться в себе. – VeryPoliteNerd
@VeryPoliteNerd Спасибо, и имейте в виду, что все эти «сильные мнения» по синглонам имеют большой смысл. В большинстве случаев синглтоны - это всего лишь попытка обернуть глобальные переменные чем-то, что выглядит более профессионально. Я бы по-прежнему реализовал GeoFenceController как обычный класс со статическим методом + sharedInstance. Это упростит модульное тестирование и рефакторинг, если вам придется обрабатывать прецедент, требуя в будущем нескольких экземпляров GeoFenceController. –
@VeryPoliteNerd не могли бы вы дать мне свой код? – SaiPavanParanam