Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Каковы недостатки использования синглтонов в mvvmcross


Каковы недостатки использования синглтонов в mvvmcross


Синглтоны, хотя и полезны для обеспечения одного экземпляра класса, имеют несколько недостатков, которые могут повлиять на обслуживание и масштабируемость приложений, в том числе те, которые используют MVVMcross. Вот некоторые из ключевых вопросов:

1. Проблемы с тестируемостью **

Синглтоны, как известно, трудно проверить, потому что они держат штат и управляют своим собственным жизненным циклом. Это делает трудности писать модульные тесты, которые непреднамеренно взаимодействуют с сетью или другими внешними системами. В MVVMcross, где тестирование имеет решающее значение для обеспечения надежности моделей обзора и других компонентов, синглетоны могут препятствовать способности эффективно изолировать и тестировать отдельные компоненты [1] [4].

2. Неспособность данных и проблемы с многопользованием **

В многопоточных средах синглтоны могут привести к несоответствию данных, если не правильно синхронизироваться. Это может привести к нетерминированному поведению, что затрудняет отладку проблем. Несмотря на то, что это возможно сделать нить, это добавляет сложности и не всегда делается правильно [2] [4].

3. Скрытые зависимости и связь **

Синглтоны поощряют скрытые зависимости, предоставляя глобальный доступ к ресурсам. Это может привести к тесной связи между классами, так как все они зависят от конкретной реализации синглтона. В MVVMcross, где свободная связь полезна для поддержания чистой архитектуры, синглетоны могут подорвать этот принцип, затрудняя изменение или замену компонентов, не влияя на всю систему [2] [3].

4. Нарушение солидных принципов **

Одинокие, нарушают несколько солидных принципов:
- Принцип единой ответственности (SRP): синглтоны часто управляют своим собственным жизненным циклом в дополнение к своим основным обязанностям, что может привести к ненужной сложности.
-Принцип инверсии зависимости (DIP): модули высокого уровня должны зависеть от деталей низкого уровня, но с синглетами они часто делают, поскольку они полагаются на конкретную реализацию синглтона [2] [3].

5. Ограничения масштабируемости и гибкости **

Синглтоны могут ограничить масштабируемость, затрудняя адаптацию к изменяющимся требованиям. Если приложение должно обрабатывать несколько экземпляров ресурса или изменить управление ресурсами, синглтоны могут стать узким местом. В MVVMcross, где гибкость важна для обработки различных платформ и конфигураций, Singletons может ограничить эти возможности [7].

6. Проблемы управления государством **

Синглтоны несут штат на протяжении всей жизни приложения, что может затруднить эффективное сброс или управление состоянием. Это особенно проблематично в приложениях, где состояние необходимо обновлять или обновлять часто [4].

Альтернативы для синглтонов

Чтобы избежать этих недостатков, разработчики часто обращаются к инъекции зависимости как более гибкую и поддерживаемую альтернативу. Инъекция зависимости позволяет компонентам быть свободно связанными и легко протестированными, обеспечивая зависимости с помощью конструкторов или других средств, а не полагаться на глобальные экземпляры [1] [7]. В MVVMcross с использованием инъекции зависимостей может помочь поддерживать чистую, масштабируемую архитектуру, которую легче проверить и поддерживать.
Цитаты:
[1] https://www.reddit.com/r/iosprogramming/comments/9zxqj1/why_i_cant_use_singleton_why_it_is_bad_design/
[2] https://www.youtube.com/watch?v=x6gbdwfnin4
[3] https://www.davidtanzer.net/david's%20blog/2016/03/14/6-reasonswhy-you-should-avoid-singletons.html
[4] https://matteomanferdini.com/wift-singleton/
[5] https://forums.kodeco.com/t/why-i-cant-use-singleton-why-it-is-bad-design-pattern/56168
[6] https://www.reddit.com/r/androiddev/comments/8v2wfa/are_singletons_a_bad_practice/
[7] https://www.linkedin.com/advice/0/what-benefits-rawbacks-using-singleton-1e
[8] https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what