🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
13 messages
13 total messages Started by Ciekawy Tue, 27 May 2014 15:55
odwołania do obiektu - podstawy
#82118
Author: Ciekawy
Date: Tue, 27 May 2014 15:55
27 lines
2073 bytes
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ę.

Pozdrawiam Ciekawy

---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Re: odwołania do obiektu - podstawy
#82119
Author: 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
Re: odwołania do obiektu - podstawy
#82126
Author: wloochacz
Date: Tue, 27 May 2014 17:53
28 lines
2367 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ę.
Jakie komponenty?
Właśnie opisałeś connection pooling, niektóre komponenty (tak właśnie, 
np. AnyDAC/FireDAC) potrafią zarządzać pulą połączeń w sposób automatyczny.

-- 
wloochacz
Re: odwołania do obiektu - podstawy
#82120
Author: Ciekawy
Date: Tue, 27 May 2014 18:22
13 lines
1522 bytes
W dniu 2014-05-27 18:34, Arivald pisze:
> Po trzecie zamieniasz TDictionary<string,TRRDatabase>; na odpowiednik
> mogacy trzymać interfejsy jako wartości (nie wiem czy jest, czy może
> TDictionary da radę?).

No właśnie ja też nie specjalnie.. posprawdzam. Tylko pytam o gotowca, 
jak każdy nieuk.

Pozdrawiam Ciekawy

---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Re: odwołania do obiektu - podstawy
#82121
Author: R.e.m.e.K
Date: Tue, 27 May 2014 18:48
16 lines
1657 bytes
Dnia Tue, 27 May 2014 20:22:43 +0200, Ciekawy napisał(a):

>> Po trzecie zamieniasz TDictionary<string,TRRDatabase>; na odpowiednik
>> mogacy trzymać interfejsy jako wartości (nie wiem czy jest, czy może
>> TDictionary da radę?).
> 
> No właśnie ja też nie specjalnie.. posprawdzam. Tylko pytam o gotowca, 
> jak każdy nieuk.
> 

A ja wiem, da rade.


-- 
pozdro
R.e.m.e.K
Re: odwołania do obiektu - podstawy
#82127
Author: Ciekawy
Date: Tue, 27 May 2014 18:57
16 lines
1752 bytes
W dniu 2014-05-27 19:53, wloochacz pisze:

> Właśnie opisałeś connection pooling, niektóre komponenty (tak właśnie,
> np. AnyDAC/FireDAC) potrafią zarządzać pulą połączeń w sposób automatyczny.
>
No tak, tylko ja niektóre sprawy robię trochę "chałupniczo", bo też mi 
cały potencjał niektórych płatnych komponentów nie jest potrzebny.

A w tym przypadku, tylko ta jedna sprawa pisanie kodu zliczania połączeń 
Vs techniki interfejsowe, które rzadko używam i czuję się niepewnie.

Pozdrawiam Ciekawy

---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Re: odwołania do obiektu - podstawy
#82122
Author: Ciekawy
Date: Tue, 27 May 2014 18:59
11 lines
1394 bytes
W dniu 2014-05-27 20:48, R.e.m.e.K pisze:

>
> A ja wiem, da rade.

  To nie bądź świnqa i podrzuć coś


---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Re: odwołania do obiektu - podstawy
#82123
Author: R.e.m.e.K
Date: Tue, 27 May 2014 19:25
17 lines
1671 bytes
Dnia Tue, 27 May 2014 20:59:14 +0200, Ciekawy napisał(a):

>> A ja wiem, da rade.
> 
>   To nie bądź świnqa i podrzuć coś

TDictionary<string,IRRDatabase>
 
> ---
> Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
> http://www.avast.com

Usuniesz tego smiecia?

-- 
pozdro
R.e.m.e.K
Re: odwołania do obiektu - podstawy
#82124
Author: Ciekawy
Date: Tue, 27 May 2014 19:29
16 lines
1626 bytes
W dniu 2014-05-27 21:25, R.e.m.e.K pisze:
> Dnia Tue, 27 May 2014 20:59:14 +0200, Ciekawy napisał(a):
>
>>> A ja wiem, da rade.
>>
>>    To nie bądź świnqa i podrzuć coś
>
> TDictionary<string,IRRDatabase>
>
>> ---
>> Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
>> http://www.avast.com
>
> Usuniesz tego smiecia?
>
Jasne
Re: odwołania do obiektu - podstawy
#82125
Author: Ciekawy
Date: Tue, 27 May 2014 19:29
16 lines
1626 bytes
W dniu 2014-05-27 21:25, R.e.m.e.K pisze:
> Dnia Tue, 27 May 2014 20:59:14 +0200, Ciekawy napisał(a):
>
>>> A ja wiem, da rade.
>>
>>    To nie bądź świnqa i podrzuć coś
>
> TDictionary<string,IRRDatabase>
>
>> ---
>> Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
>> http://www.avast.com
>
> Usuniesz tego smiecia?
>
jasne
Re: odwołania do obiektu - podstawy
#82128
Author: Piotr Rezmer
Date: Tue, 27 May 2014 20:19
19 lines
1711 bytes
Ciekawy pisze:

> A w tym przypadku, tylko ta jedna sprawa pisanie kodu zliczania połączeń
> Vs techniki interfejsowe, które rzadko używam i czuję się niepewnie.

Pamiętaj że jeśli zdecydujesz się na zliczanie referencji to nie usuwaj 
obiektu połączenia tylko zwróć go do puli wolnych połączeń.

Ja zrobiłem sobie taką "nakładkę" na ADO i mam tam klasę pomocniczą z 
metodami GetADODataset() która zwraca mi IADODataSetInterface() a ten 
interfejs ma metodę GetDataSet(). W ten sposób gdy kończy się kod w 
którym jest wywołana metoda GetADODataset() wykonywana jest metoda 
Release() i obiekt TADOConnection wraca do puli.


-- 
pozdrawiam
Piotr
XLR250&bmw_f650_dakar
Re: odwołania do obiektu - podstawy
#82129
Author: wloochacz
Date: Wed, 28 May 2014 08:58
18 lines
1940 bytes
W dniu 2014-05-27 20:57, Ciekawy pisze:
> W dniu 2014-05-27 19:53, wloochacz pisze:
>
>> Właśnie opisałeś connection pooling, niektóre komponenty (tak właśnie,
>> np. AnyDAC/FireDAC) potrafią zarządzać pulą połączeń w sposób
>> automatyczny.
>>
> No tak, tylko ja niektóre sprawy robię trochę "chałupniczo", bo też mi
> cały potencjał niektórych płatnych komponentów nie jest potrzebny.
>
> A w tym przypadku, tylko ta jedna sprawa pisanie kodu zliczania połączeń
> Vs techniki interfejsowe, które rzadko używam i czuję się niepewnie.
Moim zdaniem to mylisz się totalnie, jeśli Twoja appka choć trochę 
przypomina typowe aplikacje Delphi.
Pytałem jakie komponenty, a nie o Twoje obawy...

-- 
wloochacz
Re: odwołania do obiektu - podstawy
#82130
Author: Ciekawy
Date: Wed, 28 May 2014 09:45
18 lines
2080 bytes
 >> A w tym przypadku, tylko ta jedna sprawa pisanie kodu zliczania połączeń
 >> Vs techniki interfejsowe, które rzadko używam i czuję się niepewnie.
 > Moim zdaniem to mylisz się totalnie, jeśli Twoja appka choć trochę
 > przypomina typowe aplikacje Delphi.
 > Pytałem jakie komponenty, a nie o Twoje obawy...
 >
Jasne w tym przypadku dla dostępu do danych używam ZEOSa, TRRDatabase
to komponent opakowujący Zconnection. Ale sprawę załatwiłem najprościej 
jak potrafiłem. Czyli fexternalConnList:TDictionary<string, TRRDatabase>
program sprawdza czy połączenie już zostało zdefiniowane, jeśli nie 
tworzy TRRDatabase i doje do słownika.
Jeśli połączenie jest, zwiększa licznik połączń w TRRDatabase
fconnCount:integer;
w przypadku odłączania się od połczenia program zmniejsza licznik
połączeń. Jeśli jest równy 0 zwalnia TRRDatabase (usuwa pozycję ze 
słownika).

Pozdrawiam Ciekawy
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads