Article View: pl.comp.lang.delphi
Article #346407Re: Circular Unit Reference (Circular Class Reference)
From: Mikołaj 'Virion' Milewski
Date: Tue, 13 Mar 2018 12:29
Date: Tue, 13 Mar 2018 12:29
27 lines
3780 bytes
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-mailReferences:
<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