🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: MS SQL Express czy Firebird

#82514
From: jh
Date: Tue, 31 Mar 2015 07:04
45 lines
3446 bytes
W dniu 2015-03-31 o 08:08, Arivald pisze:

>> Jeżeli baza nie jest bardzo skomplikowana da się napisać - szczególnie z
>> FireDAC tak, żeby działało poprawnie z obiema bazami - FB i MS SQL.
>> Trochę to upierdliwe, szczególnie jak masz procedury, ale da się.
>
> Tu pomaga warstwowy model aplikacji, który jest mocno ograniczony w
> Delphi, Ja się go dopiero w Javie nauczyłem.
>
> Chodzi o to żeby nie używać bezpośrednio bazy danych i SQLi z logiki
> biznesowej, ale wołać odpowiednie metody z serwisów DAO (serwis
> rozumiany jako klasa w aplikacji, singleton, DAO => data access object).
> Zaś same serwisy DAO aplikacji znane są tylko poprzez interfejsy, a dla
> każdego typu bazy jest osobna implementacja. I to tylko ta implementacja
> musi wiedzieć jak się dogadać z bazą, w Javie zwracając logice
> biznesowej albo pojedyncze dane (jak count, itp) czy kolekcje obiektów,
> a w Delphi TDatasety, jeśli ORM Ci nie pasuje.
>
> Fakt, wymaga to więcej pracy. Ale potem jest się w zasadzie niezależnym
> od bazy danych, zawsze można stosunkowo niskim kosztem dopisać kod dla
> nowej bazy. Zresztą zazwyczaj nie ma dużo pisania, bo implementacje
> serwisów DAO dla konkretnych baz najczęściej dziedziczą z jednej bazowej
> klasy, która implementuje wszystko współdzielone, dialekty SQL nie są aż
> tak bardzo różne.
> Co więcej, jeśli jakaś baza nie realizuje konkretnej funkcjonalności,
> można ją emulować w samym serwisie DAO. Np dla MSSQLa pewna funkcja może
> być procedurą składowaną, ale dla SQLite tą samą funkcjonalność zrobisz
> w kodzie.
>
> http://pl.wikipedia.org/wiki/Data_Access_Object
> http://en.wikipedia.org/wiki/Data_access_object


Na poziomie samego połączenia i datasetów FireDAC też mocno ułatwia taką 
pracę. Ja mam taką mini fabrykę do połączeń, która preparuje odpowiednie 
parametry w zależności od bazy (tcp/local/embedded/typ/baza/autentykacja 
itd.), a ustawienia są trzymane np. w XML. W datasetach FireDAC/AnyDAC 
mam makra, kod warunkowy zależny od RDBMS. Wystarczy te SQLe trzymać 
poza datasetami w kodzie/bazie/plikach, pola definiować w runtime itd. 
Do tego mapowanie typów począwszy od połączenia, dziedziczone przez 
datasety. Jak się to obsłuży fabryką datasetów i połączeń to pomimo 
poświęcenia czasu na kodowanie zamiast wyklikanie wszystkiego na 
DataModule będzie fajnie działać.

jh
Technical Details
Message-ID: <mfdgt0$tq0$1@node2.news.atman.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
References: <06196884-a15c-45f4-8511-e39c7d9ce58b@googlegroups.com> <mfcjda$as3$1@node1.news.atman.pl> <mfdf0k$g5o$1@mx1.internetia.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!.POSTED!not-for-mail
From: jh <no-email@sorry.com>
Newsgroups: pl.comp.lang.delphi.bazy-danych
Subject: Re: MS SQL Express czy Firebird
Date: Tue, 31 Mar 2015 09:04:02 +0200
Organization: ATMAN - ATM S.A.
Lines: 46
Message-ID: <mfdgt0$tq0$1@node2.news.atman.pl>
References: <06196884-a15c-45f4-8511-e39c7d9ce58b@googlegroups.com> <mfcjda$as3$1@node1.news.atman.pl> <mfdf0k$g5o$1@mx1.internetia.pl>
NNTP-Posting-Host: rk-193-19-124-170.kielce.net.pl
Mime-Version: 1.0
X-Trace: node2.news.atman.pl 1427785440 30528 193.19.124.170 (31 Mar 2015 07:04:00 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Tue, 31 Mar 2015 07:04:00 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0
In-Reply-To: <mfdf0k$g5o$1@mx1.internetia.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit