Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Quais são as desvantagens de usar singletons em mvvmcross


Quais são as desvantagens de usar singletons em mvvmcross


Os singletons, embora úteis para garantir uma única instância de uma classe, têm várias desvantagens que podem impactar a manutenção e a escalabilidade dos aplicativos, incluindo aqueles que usam MVVMcross. Aqui estão alguns dos principais problemas:

1. Problemas de testabilidade **

Os singletons são notoriamente difíceis de testar porque mantêm o estado e gerenciam seu próprio ciclo de vida. Isso torna difícil escrever testes de unidade que não interagem inadvertidamente com a rede ou outros sistemas externos. Em MVVMcross, onde o teste é crucial para garantir a confiabilidade dos modelos de visão e outros componentes, os singletons podem dificultar a capacidade de isolar e testar componentes individuais de maneira eficaz [1] [4].

2. Problemas de inconsistência e multithreading de dados **

Em ambientes multithread, os singletons podem levar à inconsistência de dados se não forem sincronizados adequadamente. Isso pode resultar em comportamento não determinístico, dificultando a depuração de problemas. Embora seja possível tornar a segura de threads singletons, isso acrescenta complexidade e nem sempre é feito corretamente [2] [4].

3. Dependências ocultas e acoplamento **

Os singletons incentivam as dependências ocultas, fornecendo um ponto de acesso global aos recursos. Isso pode levar a um acoplamento apertado entre as classes, pois todos dependem da implementação concreta do singleton. No MVVMcross, onde o acoplamento solto é benéfico para manter uma arquitetura limpa, os singletons podem minar esse princípio, dificultando a alteração ou a substituição dos componentes sem afetar todo o sistema [2] [3].

4. Violação de princípios sólidos **

Singletons violam vários princípios sólidos:
- Princípio de responsabilidade única (SRP): os singletons geralmente gerenciam seu próprio ciclo de vida, além de suas principais responsabilidades, o que pode levar à complexidade desnecessária.
-Princípio da inversão de dependência (DIP): os módulos de alto nível não devem depender de detalhes de baixo nível, mas com singletons, geralmente dependem, pois dependem da implementação concreta do singleton [2] [3].

5. Limitações de escalabilidade e flexibilidade **

Os singletons podem limitar a escalabilidade, dificultando a adaptação às mudanças nos requisitos. Se um aplicativo precisar lidar com várias instâncias de um recurso ou alterar como os recursos são gerenciados, os singletons poderão se tornar um gargalo. Em MVVMcross, onde a flexibilidade é importante para lidar com diferentes plataformas e configurações, os singletons podem restringir esses recursos [7].

6. Desafios de gerenciamento do estado **

Os singletons carregam estado durante a vida útil do aplicativo, o que pode dificultar a redefinição ou o gerenciamento de estado de maneira eficaz. Isso é particularmente problemático em aplicativos em que o estado precisa ser atualizado ou atualizado com frequência [4].

alternativas para singletons

Para evitar essas desvantagens, os desenvolvedores geralmente se voltam para a injeção de dependência como uma alternativa mais flexível e sustentável. A injeção de dependência permite que os componentes sejam vagamente acoplados e facilmente testados, fornecendo dependências por meio de construtores ou outros meios, em vez de depender de instâncias globais [1] [7]. No MVVMcross, o uso de injeção de dependência pode ajudar a manter uma arquitetura limpa e escalável que é mais fácil de testar e manter.
Citações:
[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--reasons-why-you-hould-avoid-singletons.html
[4] https://matteomanferdini.com/swift-singleton/
[5] https://forums.kodeco.com/t/why-i-cant-use-singleton-why-it-is-bad-deign-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-drawbacks-using-singleton-1e
[8] https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what