IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – Singleton (jedináčik)

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
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ě.

Odpovedať
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?

Odpovedať
24.8.2012 8:18
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá 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é.

Odpovedať
24.8.2012 11:57
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá 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é.

Odpovedať
24.8.2012 12:53
New kid back on the block with a R.I.P
Avatar
Mario
Nevyplnené
Avatar
Mario:17.1.2013 10:56

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

 
Odpovedať
17.1.2013 10:56
Avatar
Mario
Nevyplnené
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;
}
}

 
Odpovedať
17.1.2013 10:58
Avatar
Kit
Tvůrce
Avatar
Odpovedá 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.

Editované 17.1.2013 11:49
Odpovedať
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;
       }
   }
}
 
Odpovedať
17.1.2013 15:05
Avatar
lcet.m
Člen
Avatar
Odpovedá na Kit
lcet.m:17.1.2013 15:09

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

 
Odpovedať
17.1.2013 15:09
Avatar
Kit
Tvůrce
Avatar
Odpovedá 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.

Odpovedať
18.1.2013 10:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!