🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Druga Instancja Interfejsu

#334908
From: konsul41
Date: Tue, 24 Jan 2012 09:44
50 lines
2935 bytes
Tytułem wstępu
Główne założenie jest takie aby program nie wiedział nic o zawartości klas 
implementujących interfejsy znajdujących się w dll.
Interfejsy są tworzone w dll a program w zasadzie nic nie wie o klasie 
implementującej interfejs.
Interfejs tylko obrabia dane nie przechowuje ich.
Przed każdą operają interfejs ma przydzielany wskaźnik na dane i dopiero je 
obrabia.

Nie ma problemu gdy mam tylko obrobić jednorazowo dane i dalej następne.
Niestety problem gdy dane muszą "współpracować" ze sobą -> Jedne dane muszą 
"powiadomić" inne o swojej zmianie itd.


>> CONST NazwaObiektu = 'Etykieta1';
>>
>> procedure CIPitDraw(out Obiekt: IPitDraw; out ObiektName : String);
>> begin
>> Obiekt:=TEtykieta1.Create;
>> ObiektName:=NazwaObiektu;
>> end;
> Po co Ci osobne ObiektName (poza tym - łat a kul name, takie 
> ingliszpolskie :D)?
Nawyki amatora.
> Pewnie, żeby używać w TDictionary - tak?
Nie wzorzec obserwator i problemy z jego implementacją.

> Skoro tak, to dlaczego nie trzymasz ObiektName w IPitDraw??
Nie, mam TDictionary i to jest główna lista interfejsów.
W IPITDraw jest ObiektName dziedziczący w wyzszego interfejsu.

Ten ObiektName w dll jest tylko po to aby podczas wczytywania dll wiedzieć 
jaki obiekt obsługuje wtyczka/dll bez tworzenia interfejsu.


> A dlaczego nie dodasz metody fabrykującej instancję do interfejsu?
>  IPitDraw = interface(IObiekt)
>  ['{E4FE2E92-7B11-4ABB-BBA6-FBA87BA11387}']
>    function CreateInstance : IObiekt;
>  end;
> Wtedy każda instancja interjsu może tworzyć nowe instancje samego siebie.
>
> Albo, możesz utworzyć interfejs fabryki który będzie fabrykował 
> interfejsy...
> Czyli oddelegować fabrykowanie do osobnego insterfejsu - Twoja procedura 
> CIPitDraw jest taką fabryką.

Dzięki dodałem do interfejsu
procedure CreateInstance(out   Obiekt: IPitEdit; Out ObiektName : String);
i działa tak jak chciałem.
Technical Details
Message-ID: <4f1e7d8d$0$1265$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <4f1e676c$0$1226$65785112@news.neostrada.pl> <jflqud$3o1$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: <konsul41@wp.pl>
Newsgroups: pl.comp.lang.delphi
References: <4f1e676c$0$1226$65785112@news.neostrada.pl> <jflqud$3o1$1@inews.gazeta.pl>
Subject: Re: Druga Instancja Interfejsu
Date: Tue, 24 Jan 2012 10:44:47 +0100
MIME-Version: 1.0
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.5931
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157
Lines: 52
Message-ID: <4f1e7d8d$0$1265$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 178.42.204.87
X-Trace: 1327398286 unt-rea-a-02.news.neostrada.pl 1265 178.42.204.87:2974
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit