Singletonit, vaikka se on hyödyllinen yhden luokan esiintymän varmistamiseksi, on useita haittoja, jotka voivat vaikuttaa sovellusten ylläpidettävyyteen ja skaalautuvuuteen, mukaan lukien MVVMCrossia käyttävät. Tässä on joitain avainkysymyksiä:
1. Testattavuusongelmat **
Singletonia on tunnetusti vaikea testata, koska he pitävät valtiota ja hallitsevat omaa elinkaarta. Tämän vuoksi on haastavaa kirjoittaa yksikkötestejä, jotka eivät vahingossa ole vuorovaikutuksessa verkon tai muiden ulkoisten järjestelmien kanssa. MVVMCrossissa, jossa testaus on ratkaisevan tärkeää näkökulmien ja muiden komponenttien luotettavuuden varmistamiseksi, singletonit voivat estää kykyä eristää ja testata yksittäisiä komponentteja tehokkaasti [1] [4].2. Tietojen epäjohdonmukaisuus ja monisäikeiset ongelmat **
Monisäikeissä ympäristöissä singletonit voivat johtaa tietojen epäjohdonmukaisuuteen, jos niitä ei ole synkronoitu oikein. Tämä voi johtaa ei-deterministiseen käyttäytymiseen, mikä vaikeuttaa ongelmien virheenkorjausta. Vaikka Singletons-langan turvallinen on mahdollista, tämä lisää monimutkaisuutta eikä sitä aina ole tehty oikein [2] [4].3. Piilotetut riippuvuudet ja kytkentä **
Singletonit rohkaisevat piilotettuja riippuvuuksia tarjoamalla globaalin pääsyn resursseille. Tämä voi johtaa tiukkaan kytkemiseen luokkien välillä, koska ne kaikki riippuvat Singletonin betonin toteutuksesta. MVVMCrossissa, jossa löysä kytkentä on hyödyllistä puhtaan arkkitehtuurin ylläpitämiselle, singletonit voivat heikentää tätä periaatetta vaikeuttamalla komponenttien muuttamista tai korvaamista vaikuttamatta koko järjestelmään [2] [3].4. Vahvien periaatteiden rikkominen **
Singletonit rikkovat useita vankkoja periaatteita:- Yhden vastuun periaate (SRP): Singletons hallinnoi usein omaa elinkaariaan ensisijaisten vastuidensa lisäksi, mikä voi johtaa tarpeettomaan monimutkaisuuteen.
-Riippuvuuden inversioperiaate (DIP): Korkean tason moduulit eivät saisi riippua matalan tason yksityiskohdista, mutta singletonien kanssa he tekevät usein, koska ne luottavat Singletonin konkreettiseen toteutukseen [2] [3].
5. skaalautuvuus- ja joustavuusrajoitukset **
Singletonit voivat rajoittaa skaalautuvuutta vaikeuttamalla sopeutumista muuttuviin vaatimuksiin. Jos sovelluksen on käsiteltävä useita resursseja tai muutettava resurssien hallintaa, singletonit voivat tulla pullonkaulana. MVVMCrossissa, jossa joustavuus on tärkeää eri alustojen ja kokoonpanojen käsittelemiseksi, singletonit voivat rajoittaa näitä ominaisuuksia [7].6. Valtion hallintahaasteet **
Singletonit kantavat tilaa sovelluksen elinaikana, mikä voi vaikeuttaa tilan palauttamista tai hallintaa tehokkaasti. Tämä on erityisen ongelmallista sovelluksissa, joissa valtio on päivitettävä tai päivitettävä usein [4].Vaihtoehtoja singletoneille
Näiden haittojen välttämiseksi kehittäjät kääntyvät usein riippuvuusinjektioon joustavampana ja ylläpidettävänä vaihtoehtona. Riippuvuusinjektio mahdollistaa komponenttien kytkemisen löysästi ja testata helposti tarjoamalla riippuvuuksia rakentajien tai muiden keinojen kautta sen sijaan, että luottaisit globaaleihin tapauksiin [1] [7]. MVVMCrossissa riippuvuusinjektion käyttäminen voi auttaa ylläpitämään puhdasta, skaalautuvaa arkkitehtuuria, jota on helpompi testata ja ylläpitää.Viittaukset:
.
[2] https://www.youtube.com/watch?v=X6GBDWFNIN4
.
[4] https://mattemanferdini.com/swift-singleton/
.
[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
.