NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 2 - Singleton (jedináček)

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Kit
Tvůrce
Avatar
Kit:21.8.2012 12:06

Skvělé. Obvykle to vídávám udělané jako statickou třídu, což je nepraktické. Přitom úplně stačila statická proměnná a metoda. V PHP to řeším podobně.

Odpovědět
21.8.2012 12:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Jančík
Vlastník
Avatar
David Jančík:24.8.2012 8:18

V druhém případě by měla být proměnná databaze také statická, aby se k ní dalo přistupovat ze statických metod. Ale to pak k ní nepůjde přistupovat přes instanci Singletonu. Nějaký čudný? :D
A taky když vrátím instanci singletonu tak bych měl přiřazovat do Pripojeni spíš getInstance()­.databaze ne?

Odpovědět
24.8.2012 8:18
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na David Jančík
David Hartinger:24.8.2012 11:57

Nene, ta proměnná je právě instanční. Celá krása Singletonu je v tom, že je to vlastně instance. Ty jen zakážeš uživateli, aby ji tvořil a spravuješ si ji sám pomocí statiky. Může to být trochu matoucí, ale třída Singleton si ve statice drží instanci třídy Singleton. Ta instance má normálně instanční proměnné.

Odpovědět
24.8.2012 11:57
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na David Jančík
David Hartinger:24.8.2012 12:53

Opravil jsem 2. kód, bylo tam místo instance databaze. Třídu dále není vhodné označovat jako public, na což jsme s David Jančíkem přišli, protože poté není možné v singletonu uchovávat třídy bez modifikátoru.

Nyní je vše ozkoušené.

Odpovědět
24.8.2012 12:53
New kid back on the block with a R.I.P
Avatar
Mario
Neregistrovaný
Avatar
Mario:17.1.2013 10:56

{
get
{
if (instance == null)
instance = new Singleton();
return instance;
}
}

 
Odpovědět
17.1.2013 10:56
Avatar
Mario
Neregistrovaný
Avatar
Mario:17.1.2013 10:58

Jenom podotknu, ze C# ma super funkcionalitu vlastnosti, kterou tady jde pekne vyuzit. Priklad:

public static Singleton Instance
{
get
{
if (instance == null)
instance = new Singleton();
return instance;
}
}

 
Odpovědět
17.1.2013 10:58
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:17.1.2013 11:47

Od doby, kdy jsem přišel na Dependency Injection, doporučuji Singleton nepoužívat. Je k ničemu a špatně se testuje.

Editováno 17.1.2013 11:49
Odpovědět
17.1.2013 11:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
lcet.m
Člen
Avatar
lcet.m:17.1.2013 15:05

Vůbec nechápu, k čemu je ta public Databaze? Jako aby šla kdykoliv odkudkoliv z programu přepsat? Tak to je přesně to, čemu se snaží singleton zabránit.

Vůbec tu nějak často vídám public fields, což jde proti zásadám OOP. V případech, kdy jde v podstatě o konstanty, používat alespoň readonly. Správně to říká @Mario@

public class Singleton
{

   private Singleton(){}

   private static Singleton _inst = null;

   public static Singleton Current
   {
       get
       {
          _inst = _inst ?? new Singleton();
          return _inst;
       }
   }
}
 
Odpovědět
17.1.2013 15:05
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:17.1.2013 15:09

O co hůř se testuje singleton, než DI?

 
Odpovědět
17.1.2013 15:09
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:18.1.2013 10:07

Netuším, jak se píší mocky pro singleton, ale v DI je to hračka.

Singleton ani neřeší, když například chci otevřít dvě nebo více databází. Musím kvůli tomu vytvořit další třídy. V DI stačí další instance.

Odpovědět
18.1.2013 10:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 23.