Article View: pl.comp.lang.delphi
Article #346409Re: Circular Unit Reference (Circular Class Reference)
From: Mikołaj 'Virion' Milewski
Date: Wed, 14 Mar 2018 07:45
Date: Wed, 14 Mar 2018 07:45
33 lines
5209 bytes
5209 bytes
W dniu wtorek, 13 marca 2018 15:04:00 UTC+1 użytkownik immo napisał: > Poza tym - nie rozumiem o co Ci chodzi :) Chyba że o to, że koniec końców w aplikacji widoczne jest to jako obiekt który ma w sobie obiekty :P Różnica jest zasadnicza: - w Twoim podejściu zależności są zaszyte w kodzie, co znakomicie utrudnia, jeśli nie uniemożliwia zarządzanie nimi - np. bez 100% pokrycia kodu testami możemy nie wiedzieć, że kod używa zależności, która nie jest spełniona, - przy użyciu mechanizmów DI zależności są zadeklarowane w interfejsie klasy np. jako parametry konstruktora, co jest przejrzyste i pozwala na automatyzację, ale jest też bezpieczniejsze - zależności są rozwiązywane w momencie tworzenia instancji klasy. Do tego dochodzą takie kwestie, jak np. możliwość zmiany modelu czasu życia usługi - jedna zmiana w konfiguracji i zamiast singletona, mamy instancję serwisu per klient, jeśli akurat zajdzie taka potrzeba. > Przeczytałem i nadal nie rozumiem. Pomijając kwestie interfejsów oraz usług i DI to całą reszta mniej więcej dokładnie opisuje to co mam. > > Przecież nie będę tłumaczył że jest to framework niezależny od jakiejkolwiek aplikacji gdzie na podstawie konfiguracji dostarczanej mu z dowolnego miejsca niejako buduje sobie aplikacje i sposób jej działania? Wszystko pięknie. Pytanko: czy przypadkiem nie dostarczasz zawsze kompletu usług frameworka, niezależnie od tego, jaki podzbiór 'pluginów' jest wybrany do danego wdrożenia - niezależnie od tego, czy dana usługa faktycznie jest użyta przez którykolwiek plugin? > Dlatego chce mieć singletona bo nie ma potrzeby żeby była więcej niż jedna instancja frameworka (bo to nawet niewskazane), chce mieć wszystko usystematyzowane i poukładane, tak aby dostęp do podstawowych 'niezmiennych' funkcjonalności był jednakowy. Rozszerzenia logiki dostępne przez dllki, formy generowane przez fabrykę na podstawie metadanych... Nie znam lepszej formy na 'usystematyzowanie i poukładanie' zależności w kodzie niż zautomatyzowanie tego zadania za pomocą kontenera IoC. > > ...a singletony to zło. W systemie powinien być tylko jeden singleton: kontener IoC. > > Zło a jednak sam to proponujesz :) Nie ma znaczenia czy dla kontenera IoC czy dla czegoś innego. Zresztą, ja już pisałem że to jest strasznie uproszczone dla potrzeb pokazania tutaj samego schematu działania a nie tego jak to faktycznie jest zrobione. I to tylko kwestia nazewnictwa czy Ty to nazwiesz kontener IoC w którym trzymasz wszystko, czy ja to nazwę Core i trzymam dokładnie to samo. To nie ja proponuję, tylko JAKIŚ stan globalny w programie zawsze będzie. Im go mniej, tym lepiej. Kontener ma tą przewagę nad Twoim Core, że jego struktura jest dynamiczna, przyjmie wszystko - oraz że kontener jest raczej bytem 'z boku', który tylko łączy ze sobą klocki, a nie punktem dostępowym do funkcjonalności frameworka - nigdy nie powinno być potrzeby jawnego odwoływania się do kontenera z poziomu serwisów ani klientów. > pozdrawiam, > Przemek O. Pozdrawiam, Virion
Technical Details
Message-ID:
<73aff336-0bd7-4590-ad8f-fb1be7da05b2@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!peer03.am4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!e10-v6no83739itf.0!news-out.google.com!a25-v6ni354itj.0!nntp.google.com!e10-v6no83738itf.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> <a98a8d85-555e-4d7b-9f23-808d97ecc581@googlegroups.com> <434070bc-f6d9-465a-9e0c-3b6f942ec775@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.36.144.196 with SMTP id x187mr430557itd.6.1521013524303; Wed, 14 Mar 2018 00:45:24 -0700 (PDT) X-Received: by 10.157.0.5 with SMTP id 5mr200807ota.0.1521013524025; Wed, 14 Mar 2018 00:45:24 -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!peer03.am4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!e10-v6no83739itf.0!news-out.google.com!a25-v6ni354itj.0!nntp.google.com!e10-v6no83738itf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.delphi Date: Wed, 14 Mar 2018 00:45:23 -0700 (PDT) In-Reply-To: <434070bc-f6d9-465a-9e0c-3b6f942ec775@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> <a98a8d85-555e-4d7b-9f23-808d97ecc581@googlegroups.com> <434070bc-f6d9-465a-9e0c-3b6f942ec775@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <73aff336-0bd7-4590-ad8f-fb1be7da05b2@googlegroups.com> Subject: Re: Circular Unit Reference (Circular Class Reference) From: Mikołaj 'Virion' Milewski <mikolaj.milewski@gmail.com> Injection-Date: Wed, 14 Mar 2018 07:45:24 +0000 X-Received-Bytes: 5591 X-Received-Body-CRC: 163209693 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit