Singletons, bir sınıfın tek bir örneğini sağlamak için yararlı olsa da, MVVMCross kullananlar da dahil olmak üzere uygulamaların sürdürülebilirliğini ve ölçeklenebilirliğini etkileyebilecek birkaç dezavantaja sahiptir. İşte bazı temel sorunlar:
1. Test edilebilirlik sorunları **
Singletonların test edilmesi zordur, çünkü durumu tutarlar ve kendi yaşam döngüsünü yönetirler. Bu, ağ veya diğer harici sistemlerle yanlışlıkla etkileşime girmeyen birim testleri yazmayı zorlaştırır. Testin, görünüm modellerinin ve diğer bileşenlerin güvenilirliğini sağlamak için çok önemli olduğu MVVMCross'ta, singletonlar bireysel bileşenleri etkili bir şekilde izole etme ve test etme yeteneğini engelleyebilir [1] [4].2. Veri tutarsızlık ve çok işlevli sorunlar **
Çok iş parçacıklı ortamlarda, singletonlar uygun şekilde senkronize edilmezse veri tutarsızlığına yol açabilir. Bu, belirleyici olmayan davranışlara neden olabilir, bu da sorunların hata ayıklamasını zorlaştırır. Singletons iplik güvenli yapmak mümkün olsa da, bu karmaşıklık ekler ve her zaman doğru yapılmaz [2] [4].3. Gizli bağımlılıklar ve bağlantı **
Singletons, kaynaklara küresel bir erişim noktası sağlayarak gizli bağımlılıkları teşvik eder. Bu, hepsi singletonun somut uygulamasına bağlı olduğu için sınıflar arasında sıkı bir bağlantıya yol açabilir. Gevşek bağlantının temiz bir mimariyi korumak için faydalı olduğu MVVMCross'ta, singletonlar tüm sistemi etkilemeden bileşenleri değiştirmek veya değiştirmeyi zorlaştırarak bu prensibi zayıflatabilir [2] [3].4. Katı ilkelerin ihlali **
Singletons birkaç sağlam prensibi ihlal ediyor:- Tek Sorumluluk İlkesi (SRP): Singletons, birincil sorumluluklarına ek olarak genellikle kendi yaşam döngülerini yönetir, bu da gereksiz karmaşıklığa yol açabilir.
-Bağımlılık İnversiyon İlkesi (DIP): Üst düzey modüller düşük seviyeli ayrıntılara bağlı olmamalıdır, ancak singletonlarla, genellikle singletonun somut uygulamasına dayandıkları için yaparlar [2] [3].
5. Ölçeklenebilirlik ve esneklik sınırlamaları **
Singletons, değişen gereksinimlere uyum sağlamayı zorlaştırarak ölçeklenebilirliği sınırlayabilir. Bir uygulamanın bir kaynağın birden fazla örneğini ele alması veya kaynakların yönetildiğini değiştirmesi gerekiyorsa, singletonlar bir darboğaz haline gelebilir. Farklı platformları ve konfigürasyonları işlemek için esnekliğin önemli olduğu MVVMCross'ta, singletonlar bu yetenekleri kısıtlayabilir [7].6. Devlet yönetimi zorlukları **
Singletons, uygulamanın ömrü boyunca devlet taşır ve bu da devleti etkili bir şekilde sıfırlamayı veya yönetmeyi zorlaştırabilir. Bu, özellikle devletin sık sık yenilenmesi veya güncellenmesi gereken uygulamalarda sorunludur [4].Singletons'a Alternatifler
Bu dezavantajlardan kaçınmak için, geliştiriciler genellikle daha esnek ve sürdürülebilir bir alternatif olarak bağımlılık enjeksiyonuna dönüşür. Bağımlılık enjeksiyonu, bileşenlerin küresel örneklere güvenmek yerine yapıcılar veya diğer yollarla bağımlılık sağlayarak gevşek bir şekilde bağlanmasını ve kolayca test edilmesini sağlar [1] [7]. MVVMCross'ta, bağımlılık enjeksiyonunu kullanmak, test edilmesi ve sürdürülmesi daha kolay olan temiz, ölçeklenebilir bir mimarinin korunmasına yardımcı olabilir.Alıntılar:
[1] https://www.reddit.com/r/osprogramming/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-moutould-avoid-singletons.html
[4] https://matteomanferdini.com/swift-singleton/
[5] https://forums.kodeco.com/t/why-i-cant-use-singleton-why-it-is-bad-patern/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-singleton-1e
[8] https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what