Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.lang.php > #15696
| 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> |
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
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