🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #346407

Re: Circular Unit Reference (Circular Class Reference)

#346407
From: Mikołaj 'Virion' Milewski
Date: Tue, 13 Mar 2018 12:29
27 lines
3780 bytes
W dniu sobota, 10 marca 2018 09:59:45 UTC+1 użytkownik immo napisał:

> Chciałbym mieć dalej tę samą funkcjonalność ale napisaną dzisiaj :)

To, co Ty nazywasz funkcjonalnością ja nazywam dependency hell. Dzisiaj powszechnie używa się podejścia Inversion Of Control / Dependency Injection:

- system to zbiór komponentów - można podzielić je na przykład na usługi oraz ich klientów
- każda usługa ma publiczny interfejs oraz prywatną implementację
- klient określa, od których usług jest zależny, poprzez deklarację parametrów konstruktora o typach interfejsowych; usługa też może być klientem
- wszystkie komponenty rejestrujemy w kontenerze IoC, usługi rejestrujemy z użyciem ich publicznych interfejsów
- kontener IoC załatwia automatyzację: wykrywanie zależności, zarządzanie czasem życia komponentów, wreszcie dbaniem o to, żeby każdy komponent dostał te i tylko te usługi, których mu trzeba (od których zależy).

To opis bardzo z grubsza - dużo na ten temat napisano, a same mechanizmy kontenerów IoC z reguły pozwalają na dużo więcej, np. implementację mechanizmu pluginów. Korzyści:

- separacja odpowiedzialności, małe klasy robią jedną rzecz
- segregacja interfejsów, zmianę w 'frameworkowej' części systemu łatwiej kontrolować
- enkapsulacja, bo implementacja core'owych rzeczy jest zawsze prywatna
- testowalność, bo łatwo podmienić usługi, od których zależy testowany kod na ich zmockowane wersje
- skalowalność, bo implementację usługi można podmienić na proxy, które daje dostęp do zdalnie uruchomionej usługi

...a singletony to zło. W systemie powinien być tylko jeden singleton: kontener IoC.

> pozdrawiam,
> Przemek O.

Pozdrawiam,
Virion
Technical Details
Message-ID: <a98a8d85-555e-4d7b-9f23-808d97ecc581@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer01.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!e10-v6no1625763itf.0!news-out.google.com!a25ni4743itj.0!nntp.google.com!e10-v6no1625759itf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <06e89078-c8b6-46f1-8353-fe26050464f7@googlegroups.com> <1f7uetk1q6zns.dlg@tyczka.com> <a9a0ea51-cda4-4d78-b162-30263f6da079@googlegroups.com> <5aa02014$0$31354$65785112@news.neostrada.pl> <dyi5ls6ud9lq$.dlg@tyczka.com> <5aa04edf$0$673$65785112@news.neostrada.pl> <039a897c-b565-44af-9878-417a0e3704a9@googlegroups.com> <5aa127ab$0$1005$65785112@news.neostrada.pl> <952c4560-1ed3-4e78-a5fa-89e8254227c4@googlegroups.com> <1w838ct6a2suq.dlg@tyczka.com> <5aa143d6$0$1001$65785112@news.neostrada.pl> <8d0301ff-0c6a-48d3-a311-0765e733e24f@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 10.107.47.7 with SMTP id j7mr186162ioo.31.1520944168486;        Tue, 13 Mar 2018 05:29:28 -0700 (PDT)
X-Received: by 10.157.22.195 with SMTP id s3mr22092ots.13.1520944168324; Tue, 13 Mar 2018 05:29:28 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer01.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!e10-v6no1625763itf.0!news-out.google.com!a25ni4743itj.0!nntp.google.com!e10-v6no1625759itf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi
Date: Tue, 13 Mar 2018 05:29:28 -0700 (PDT)
In-Reply-To: <8d0301ff-0c6a-48d3-a311-0765e733e24f@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.168.65.93; posting-account=lYD4HAoAAAB1LtmkMAsKipnMzMmp1fk7
NNTP-Posting-Host: 83.168.65.93
References: <06e89078-c8b6-46f1-8353-fe26050464f7@googlegroups.com> <1f7uetk1q6zns.dlg@tyczka.com> <a9a0ea51-cda4-4d78-b162-30263f6da079@googlegroups.com> <5aa02014$0$31354$65785112@news.neostrada.pl> <dyi5ls6ud9lq$.dlg@tyczka.com> <5aa04edf$0$673$65785112@news.neostrada.pl> <039a897c-b565-44af-9878-417a0e3704a9@googlegroups.com> <5aa127ab$0$1005$65785112@news.neostrada.pl> <952c4560-1ed3-4e78-a5fa-89e8254227c4@googlegroups.com> <1w838ct6a2suq.dlg@tyczka.com> <5aa143d6$0$1001$65785112@news.neostrada.pl> <8d0301ff-0c6a-48d3-a311-0765e733e24f@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <a98a8d85-555e-4d7b-9f23-808d97ecc581@googlegroups.com>
Subject: Re: Circular Unit Reference (Circular Class Reference)
From: Mikołaj 'Virion' Milewski
 <mikolaj.milewski@gmail.com>
Injection-Date: Tue, 13 Mar 2018 12:29:28 +0000
Lines: 46
X-Received-Body-CRC: 3138436132
X-Received-Bytes: 4112
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit