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ć?

Author: RBA, 2011-01-18

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.

 20
Author: John Pickup,
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.

 13
Author: LachlanG,
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

 6
Author: Arnaud Bouchez,
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

 6
Author: Jeroen Wiert Pluimers,
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.

 3
Author: vcldeveloper,
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.

 3
Author: Chris Thornton,
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.

 3
Author: Joao Cadilhe,
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