A szingletonok, bár hasznosak az osztály egyetlen példányának biztosításához, több hátránya van, amelyek befolyásolhatják az alkalmazások karbantarthatóságát és méretezhetőségét, ideértve az MVVMCROSS -t is használókat is. Íme néhány kulcsfontosságú kérdés:
1. Tesztelhetőségi problémák **
A szinguletteket hírhedten nehéz tesztelni, mert állapotát tartják és kezelik saját életciklusukat. Ez kihívást jelent az olyan egységtesztek írását, amelyek nem véletlenül lépnek kapcsolatba a hálózattal vagy más külső rendszerekkel. Az MVVMCross -ban, ahol a tesztelés döntő jelentőségű a nézetmodellek és más komponensek megbízhatóságának biztosításához, a szingulletek akadályozhatják az egyes komponensek hatékony izolálásának és tesztelésének képességét [1] [4].2. Adatok inkonzisztencia és többszálú problémák **
Többszálú környezetben a szingulettek az adatok következetlenségéhez vezethetnek, ha nem szinkronizálják. Ez nem determinisztikus viselkedést eredményezhet, ami megnehezíti a problémák hibakeresését. Noha lehet, hogy a Singletons szál biztonságossá válhat, ez hozzáadja a bonyolultságot, és nem mindig történik meg helyesen [2] [4].3. Rejtett függőségek és összekapcsolás **
A singletons ösztönzi a rejtett függőségeket azáltal, hogy globális hozzáférést biztosít az erőforrásokhoz. Ez az osztályok közötti szoros kapcsoláshoz vezethet, mivel mindegyik a szingulett konkrét megvalósításától függ. Az MVVMCross -ban, ahol a laza tengelykapcsoló előnyös a tiszta architektúra fenntartásához, a szingletonok alááshatják ezt az elvet azáltal, hogy megnehezítik az alkatrészek megváltoztatását vagy cseréjét anélkül, hogy az egész rendszert befolyásolnák [2] [3].4. A szilárd alapelvek megsértése **
A szingletonok több szilárd alapelvet megsértnek:- Egyetlen felelősségvállalás alapelv (SRP): A szingulettek elsődleges felelősségeik mellett gyakran kezelik a saját életciklusukat, ami felesleges bonyolultsághoz vezethet.
-A függőség inverziós alapelve (DIP): A magas szintű moduloknak nem kell függniük az alacsony szintű részletektől, hanem a szingulettekkel gyakran megteszik, mivel a Singleton konkrét megvalósítására támaszkodnak [2] [3].
5. Skálázhatóság és rugalmassági korlátozások **
A szingletonok korlátozhatják a méretezhetőséget azáltal, hogy megnehezítik a változó követelményekhez való alkalmazkodást. Ha egy alkalmazásnak többféle erőforrás -példányt kell kezelnie, vagy megváltoztatnia kell az erőforrások kezelésének módját, akkor a szingulett szingletek szűk keresztmetszetgé válhatnak. Az MVVMCross -ban, ahol a rugalmasság fontos a különböző platformok és konfigurációk kezelésében, a szingulettek korlátozhatják ezeket a képességeket [7].6. Állami menedzsment kihívások **
A szingletonok az alkalmazás élettartama alatt állnak, ami megnehezítheti az állapot hatékony visszaállítását vagy kezelését. Ez különösen problematikus azokban az alkalmazásokban, ahol az államot gyakran frissíteni vagy frissíteni kell [4].Alternatívák a szingulettekre
E hátrányok elkerülése érdekében a fejlesztők gyakran rugalmasabb és karbantarthatóbb alternatívaként fordulnak a függőség injekciójához. A függőségi injekció lehetővé teszi az alkatrészek lazán csatlakoztatását és könnyen tesztelését azáltal, hogy konstruktorokon vagy más eszközökön keresztüli függőségeket biztosítanak, ahelyett, hogy a globális példányokra támaszkodnának [1] [7]. Az MVVMCross -ban a függőség -injekció használata elősegítheti a tiszta, méretezhető architektúrát, amelyet könnyebben tesztelhet és karbantarthat.Idézetek:
[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-hyou-you-should-void-singletons.html
[4] https://matteomferdini.com/swift-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-drawbacks-using-singleton-1e
[8] https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-wat