Article View: pl.comp.lang.delphi.bazy-danych
Article #82514Re: MS SQL Express czy Firebird
From: jh
Date: Tue, 31 Mar 2015 07:04
Date: Tue, 31 Mar 2015 07:04
45 lines
3446 bytes
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-mailReferences:
<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