Article View: pl.comp.lang.delphi.bazy-danych
Article #82119Re: odwołania do obiektu - podstawy
From: Arivald
Date: Tue, 27 May 2014 16:34
Date: Tue, 27 May 2014 16:34
56 lines
3378 bytes
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-mailReferences:
<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