🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi.bazy-danych
Article #82119

Re: odwołania do obiektu - podstawy

#82119
From: Arivald
Date: Tue, 27 May 2014 16:34
56 lines
3378 bytes
W dniu 2014-05-27 17:55, Ciekawy pisze:
> Witam serdecznie
>
> Szczerze rzadko korzystam z interfaców, i list generycznych, więc może
> pytanie wyda się cholernie naiwne.
> Ale mam takie zagadnienie.
> Połączenie z inną bazą danych:
>
> fexternalConectionList:TDictionary<string,TRRDatabase>;
>
> TRRDatabase to kontener zawierający klasę dostępu do danych, jest fajnie
> bo jak jakiś proces w bazie danych chce dostępu do konkretnego połącznia
> z inną bazą (TRRDatabase) to sprawdza na liście czy już takie jest, jak
> nie ma to go tworzy.
> Tylko problem mój polega na prostym zliczaniu czy dla danej
> connection(TRRDatabase)
> coś w programie potrzebuje jeszcze połączenia czy nie.
> Teoretycznie sprawę powinny mi załatwić interfacy. Tylko nie mam
> zielonego pojęcia jak to implementować.
> Czyli jak zamykam ostantie połączenie związane z TRRDatabase to obiekt
> połączania jest niszczony. Tak mi się coś zdaje że to abecadło, a ja
> przespałem lekcje, więc proszę mądrzejszych kolegów o ściągę.
>

Dobrze kombinujesz, ale problem jest bardziej złożony.

"TRRDatabase" to Twoja klasa? Tzn nie będzie problemu zmienić ją całkiem 
w interfejs?

Jeśi tak, to zamiast "jak jakiś proces w bazie danych chce dostępu do 
konkretnego połączenia z inną bazą (TRRDatabase) to sprawdza na liście 
czy już takie jest, jak nie ma to go tworzy" zrób sobie fabrykę/metodę 
dostępową, w stylu "wołam metodę i zwraca mi obiekt", a wewnątrz tej 
metody robisz logikę sprawdzania czy już istnieje, etc.

Po drugie do TRRDatabase dorabiasz interfejs IRRDatabase, ze wszystkimi 
publicznymi metodami.
Potem oczywiście zmieniasz cały kod który używał TRRDatabase żeby używał 
interfejsu IRRDatabase.

Po trzecie zamieniasz TDictionary<string,TRRDatabase>; na odpowiednik 
mogacy trzymać interfejsy jako wartości (nie wiem czy jest, czy może 
TDictionary da radę?).

Po czwarte, zaraz po utworzeniu TRRDatabase tworzysz referencję 
interfejsową do niej, i zapominasz referencją obiektową.
Mieszanie obu sposobów dostępu to przepis na katastrofę.


Ale zamiast interfejsów lepiej może być liczyć referencje samemu, w 
obiektach które używają TRRDatabase. Tzn po dodaniu referencji do 
TRRDatabase zwiększają licznik w TRRDatabase, przed oddaniem referencji 
zmniejszają.

-- 
Arivald
Technical Details
Message-ID: <lm2eqd$68k$1@news.dialog.net.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
References: <lm2ci4$uq6$1@node1.news.atman.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
From: Arivald <arivald_@AT_interia_DOT_.pl>
Newsgroups: pl.comp.lang.delphi.bazy-danych
Subject: Re: odwołania do obiektu - podstawy
Date: Tue, 27 May 2014 18:34:24 +0200
Organization: Dialog Net
Lines: 58
Message-ID: <lm2eqd$68k$1@news.dialog.net.pl>
References: <lm2ci4$uq6$1@node1.news.atman.pl>
NNTP-Posting-Host: 62.87.249.67
Mime-Version: 1.0
X-Trace: news.dialog.net.pl 1401208461 6420 62.87.249.67 (27 May 2014 16:34:21 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Tue, 27 May 2014 16:34:21 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0
In-Reply-To: <lm2ci4$uq6$1@node1.news.atman.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit