Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.lang.php > #15696

Re: Dobre praktyki

From Marek S <precz@spamowi.com>
Newsgroups pl.comp.lang.php
Subject Re: Dobre praktyki
Date 2018-01-27 21:59 +0100
Organization ATMAN - ATM S.A.
Message-ID <p4ip7b$boi$1@node1.news.atman.pl> (permalink)
References (10 earlier) <slrnp6oqo7.g5g.wojciech.bancer@pl-test.org> <p4hrvu$ctn$1@node2.news.atman.pl> <slrnp6p0qc.gpr.wojciech.bancer@pl-test.org> <p4iev1$uic$1@node2.news.atman.pl> <slrnp6pl4l.mtr.wojciech.bancer@pl-test.org>

Show all headers | View raw


W dniu 27-01-2018 o 20:35, Wojciech Bancer pisze:

> 
> A jest powód by był singletonem?

Poniżej

> 
>> To co chcę powiedzieć, to to, że zawsze na szczycie aplikacji jest jakiś
>> obiekt "guru".
> 
> Ale to jest powiedzmy kernel aplikacji, który postępuje wg pewnego ustalonego
> sposobu. Gdzie tu widzisz potrzebę na singletona?

Właśnie, trafiłeś w sedno w sformułowaniu "ale to jest _powiedzmy_ 
kernel". Słowo klucz to "powiedzmy". Mógłbym powiedzieć "zgoda" albo 
mógłbym powiedzieć "to jest właśnie singleton" i na jedno by wyszło. 
Kernel jest singletonem.

Zobrazuję to na podstawie Twojego przykładu. Oczywiście należy tak 
postępować jak poniżej:

 > class PobieramZBazy() {
 >      ___construct($cn) { $this->cn = $cn; }
 >      public getCostam() {
 >          return $this->cn->query(...);
 >      }
 > }

...ale właśnie teraz wpadasz w pułapkę tego, o czym cały czas piszę. 
Skąd masz połączenie do bazy $cn? Gdzieś ono musiało być zainicjowane i 
przechowywane przez całą długość życia aplikacji. Prawda? Zrobi to nasz 
"kernel" i udostępni innym obiektom handler do raz ustanowionego połączenia.

Teraz popatrz jak powstaje z kernela singleton:

class kernelZwanySingletonem() {
	private $connection;
	
	public function getConnection() {
		return $connection;
	}
	
	__construct() {
		//tu kupa kodu plus inicjacja bazy
		$this->$connection=...
	  }

	__destruct() {
		//tu kupa kodu
		zamknijPołączenieZBazaIZapiszLogi($connection);
	}
}

$singleton=new kernelZwanySingletonem();
$singleton->runApplication();

...aplikacja sobie działa i potrzebuje w pewnym momencie dostępu do 
bazy. I co wtedy robi? A no to co napisałeś.

$cosTam=new PobieramZBazy($singleton->getConnection());
$wyniki=$cosTam->getCosTam();

... aplikacja dalej pracuje i znów jakiś inny jej moduł potrzebuje 
grzebania w bazie więc:

$cosTam2=new PobieramZBazyCosInnego($singleton->getConnection());
$wyniki=$cosTam2->getCosTam();

Gdy aplikacja kończy żywot, to niejawnie wołany jest destruktor kernela 
zwanego singletonem. Baza pięknie się zamyka, ba, można nawet sprawdzić 
w tym miejscu czy moduły pozamykały prawidłowo swoje recordsety i jeśli 
nie, to w logach zapisać alerty.

Ten nasz "kernel" czy klasa "guru" to właśnie nasz singleton. Z jego 
egzystencji wszelkie pozostałe funkcjonalności czerpią soki.

I jeszcze jedno: singleton to nie jest masywna ilość statycznych metod. 
Singleton nie musi mieć żadnej statycznej. Cytat z Wiki:

"Singleton – kreacyjny wzorzec projektowy, którego celem jest 
ograniczenie możliwości tworzenia obiektów danej klasy do jednej 
instancji oraz zapewnienie globalnego dostępu do stworzonego obiektu."

Nasz kernel wypełnia wszelkie przesłanki bycia singletonem i jest on 
jedynym singletonem w całej aplikacji tej mini aplikacji. Nawet ciężko 
mi sobie wyobrazić aplikację, nie ma żadnego nadrzędnego obiektu, który 
siłą rzeczy staje się singletonem. No chyba, że programujemy liniowo w 
jakimś Basicu itp. Ważne jest aby tylko jeden tego typu obiekt 
występował pełniąc rolę np. managera pluginów (z pluginem bazy danych 
włącznie) - jak to wcześniej nazwaliśmy.

-- 
Pozdrawiam,
Marek

Back to pl.comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Dobre praktyki Roman Tyczka <noemail@because.no> - 2018-01-18 13:37 +0100
  Re: Dobre praktyki Lemat <#@lemat.priv.pl> - 2018-01-18 18:30 +0100
    Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-25 20:31 +0100
      Re: Dobre praktyki Lemat <#@lemat.priv.pl> - 2018-01-25 20:44 +0100
        Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-25 20:48 +0100
          Re: Dobre praktyki Roman Tyczka <noemail@because.no> - 2018-01-25 21:22 +0100
            Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-25 23:55 +0100
              Re: Dobre praktyki Lemat <#@lemat.priv.pl> - 2018-01-26 05:48 +0100
                Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-26 13:48 +0100
            Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-26 00:02 +0100
              Re: Dobre praktyki Roman Tyczka <noemail@because.no> - 2018-01-26 23:16 +0100
                Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-27 13:09 +0100
                Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-27 23:04 +0100
                Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-27 23:07 +0100
                Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-27 23:22 +0100
                Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-27 23:31 +0100
          Re: Dobre praktyki artiun <artiun@spam.wp.pl> - 2018-01-26 00:06 +0100
  Re: Dobre praktyki denat 'POPIS/EU <NOSPAMtestowanije@go2.pl> - 2018-01-18 20:03 +0100
  Re: Dobre praktyki Rafal Podsiadly <spinacz24@gmail.com> - 2018-01-21 05:03 -0800
    Re: Dobre praktyki Roman Tyczka <noemail@because.no> - 2018-01-21 22:38 +0100
    Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-22 21:56 +0100
      Re: Dobre praktyki Rafal Podsiadly <spinacz24@gmail.com> - 2018-01-24 08:16 -0800
        Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-24 17:20 +0100
          Re: Dobre praktyki Rafal Podsiadly <spinacz24@gmail.com> - 2018-01-24 21:30 -0800
            Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-25 20:46 +0100
            Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-25 21:10 +0100
              Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-26 00:03 +0100
                Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-26 00:26 +0100
                Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-26 14:00 +0100
                Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-27 13:05 +0100
                Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-27 13:40 +0100
                Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-27 14:49 +0100
                Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-27 19:04 +0100
                Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-27 20:35 +0100
                Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-27 21:59 +0100
                Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-27 23:02 +0100
                Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-27 23:35 +0100
                Re: Dobre praktyki Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-28 00:24 +0100
                Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-27 22:49 +0100
                Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-27 23:08 +0100
                Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-27 23:26 +0100
                Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-27 23:56 +0100
                Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-28 00:34 +0100
        Re: Dobre praktyki Roman Tyczka <noemail@because.no> - 2018-01-24 20:29 +0100
          Re: Dobre praktyki Rafal Podsiadly <spinacz24@gmail.com> - 2018-01-24 21:51 -0800
          Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-27 22:43 +0100
            Re: Dobre praktyki Roman Tyczka <noemail@because.no> - 2018-01-29 08:48 +0100
              Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-30 20:37 +0100
        Re: Dobre praktyki Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-27 22:45 +0100
          Re: Dobre praktyki Rafal Podsiadly <spinacz24@gmail.com> - 2018-01-28 07:08 -0800
    Re: Dobre praktyki Marek S <precz@spamowi.com> - 2018-01-25 20:36 +0100

csiph-web