Korzystanie z komponentów Delphi data-aware-plusy i minusy [closed]
Chcę poznać Twoją opinię na temat wykorzystania komponentów świadomych danych w projektach. Jakie są "mocne" i "słabe" punkty tworzenia aplikacji (win32 i web) przy użyciu Delphi i komponentów obsługujących dane (z pakietu standardowego Delphi lub innych firm)?
Używając FireBird pracowałem dużo z IBObjects, które są dojrzałym zestawem komponentów i działało bardzo dobrze.
Ale jest też wiele innych RDBMS (MySQL, MSSQL, DB2, Oracle, SQLite, Nexus, Paradox, Interbase, FireBird itp.). Jeśli opracowałeś duże projekty, w których używałeś wielu komponentów data-aware, proszę odpowiedzieć z typem bazy danych i nazwą pakietu komponentów data-aware.
Jestem też zainteresowany DB2 (AS400). Jakie komponenty zastosowałeś z sukcesem lub z jakimi komponentami naprawdę ciężko pracować?
7 answers
Odkryłem, że korzystanie z komponentów świadomych danych skutkuje aplikacją bez wyraźnego rozróżnienia między logiką biznesową a interfejsem użytkownika.
Jest to dobre dla małych projektów, ale wraz z ich wzrostem kod staje się coraz mniej możliwy do utrzymania.
Wszystkie różne fragmenty kodu zdarzenia (i ich interakcje) mogą stać się prawdziwym koszmarem do zrozumienia!
Niezmiennie w takich przypadkach porzuciłem komponenty świadome danych i przełączyłem się na (ręcznie kodowany) projekt MVC.
To wymaga dużo wysiłku z góry kodowania, ale wyniki (IMHO) w projekcie, który jest utrzymywalny, rozszerzalny i debuggable.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-04 17:49:34
Po wypróbowaniu zarówno danych-aware i nie danych-aware stylu aplikacji Delphi jestem z powrotem w obozie komponentów data-aware te dni. Poprawna warstwa kodu wymaga trochę pracy i dyscypliny, ale i tak jest szybsza niż robienie wszystkiego ręcznie przy użyciu kontrolek nieobsługujących danych.
Kilka moich porad dotyczących użycia komponentów opartych na danych to
Nie tylko przepisuj FishFact na większą skalę. Przemyśl swój projekt.
Nie używaj TDataModule, używaj wielu Tdatamodule, każdy odpowiedzialny za mały aspekt danych aplikacji.
TDatasets należą do TDataModules, podczas gdy TDataSources należą do TForms (chyba że są używane dla relacji master / detail).
Używaj zestawów danych w pamięci, takich jak DataSnap TClientDataSet.
-
Twój ClientDataSets nie musi dokładnie odzwierciedlać tabel bazy danych. DataSnap umożliwia masowanie struktur danych w pamięci, dzięki czemu można tworzenie zestawów danych dostosowanych do konkretnych celów. W szczególności możesz robić takie rzeczy jak
-
Łączenie dwóch lub więcej tabel w jeden edytowalny zbiór danych
Denormalizacja struktur tabeli szczegółów Głównych może czasami uprościć kod interfejsu użytkownika.
-
Tworzenie pól tylko w pamięci (jak pola obliczeniowe, ale można do nich również pisać)
-
Zagnieżdżone tabele tclientdataset są przydatne, ale nie jedyny sposób na wyrażenie szczegółów master związki. Czasami lepiej jest zrobić to w stary sposób z dwoma niezależnymi TClientDataSets połączonymi przez TDataSource.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-19 02:08:12
Spójrz na rozwiązania ORM.
To ładne podejście do architektury wielopoziomowej. Zobacz ORM dla DELPHI win32
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:11
Kontrolki data aware są świetne, ale musisz upewnić się, że Twój kod biznesowy znajduje się w oddzielnej warstwie.
To nie jest trudne, ale musisz być świadomy, jak możesz to zrobić.
Jednym z podejść jest posiadanie komponentów zestawu danych w DataModule (lub innym kontenerze niewizualnym).
Kolejną przydatną sztuczką jest użycie tclientdataset do wykonania wpisu UI i użycie go jako pośredniego bufora między interfejsem a warstwą biznesową. Warstwa biznesowa następnie korzysta z TDataSet komponenty specyficzne dla warstwy danych.
--jeroen
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 22:07:26
Komponenty bazodanowe Delphi nie zależą od silnika bazodanowego, którego używasz, więc korzystanie z Firebird lub MS SQL Server lub Oracle lub innych nie ma znaczenia dla komponentów bazodanowych. Znają tylko przypisany im komponent datasource i robią za jego pomocą wszystkie rzeczy związane z DB.
Dla mnie, jeśli coś da się zrobić z komponentami świadoma danych w przyjemny sposób, będę z nich korzystał. Są to zazwyczaj małe projekty, które należy wykonać w krótkim czasie. W większych projektach I może całkowicie wykluczyć komponenty świadome danych lub używać ich w formularzach, które są używane tylko do prezentacji danych i nie otrzymują danych wejściowych użytkownika. Jeśli chodzi o odbieranie danych wejściowych użytkownika, mogę używać komponentów Nie świadomych danych, ponieważ mam większą elastyczność w kontrolowaniu ich i walidacji danych wejściowych. Oczywiście komponenty data-ware mogą być nadal przydatne w takich scenariuszach zbyt. Nadal możesz zweryfikować dane wejściowe użytkownika w zdarzeniach zestawu danych, takich jak OnBeforePost. Również jeśli używasz projektu wielopoziomowego, a twój Klient aplikacja reprezentuje warstwę prezentera danych, walidacja danych wejściowych odbywa się w warstwie średniej, dzięki czemu można odbierać dane wejściowe za pomocą komponentów obsługujących dane w aplikacji klienckiej i wysyłać je do warstwy średniej w celu weryfikacji i dalszego przetwarzania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 10:36:53
Komponenty obsługujące dane są przydatne z perspektywy RAD i prototypowania, zwłaszcza gdy projektujesz raporty lub siatki oparte na danych. czyli możesz majstrować w czasie projektowania. Więc używam ich w ten sposób. Ale kiedy przychodzi czas, aby przekształcić go w kod wysyłkowy, prawie zawsze zrywam połączenia, usuwam SQL z zapytań i robię wszystko w kodzie. W ten sposób jest znacznie bardziej przewidywalny i możliwy do utrzymania, szczególnie w środowisku dla wielu programistów z kontrolą wersji. Kiedy SQL jest osadzony gdzieś w formularzu, to duży ból, aby spróbować dowiedzieć się, gdzie faktycznie znajduje się SQL. A szczególnie źle jest mieć SQL w dwóch miejscach, a następnie trzeba dowiedzieć się, który jest w efekcie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 13:32:05
Możesz użyć Unidac który obsługuje wiele serwerów bazodanowych, w tym Firebird (którego używam) i ma bardzo ładne funkcje.
W połączeniu z Remobject SDK {[2] } będziesz miał ładne połączenie architektury warstwy n i abstrakcji bazy danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-04 18:58:14