6

Chcę oddzielić warstwę danych od logiki biznesowej i logiki biznesowej od GUI. Nurkując w sieci natknąłem się na kilka zasobów, ale wciąż nie jestem w stanie wyjaśnić mi tego. Niektórzy ludzie mówią o wzorcach, inni wskazują na różne frameworki. Moje wymagania to:Wszelkie sugestie dotyczące oddzielenia dostępu do danych, logiki biznesowej i GUI w Delphi

  • manipulować danych z RDBMS (MySQL głównie) operacje CRUD
  • czynienia z pokolenia id (należy używać AUTOINCREMENT lub silnika dostarczonych danych lub kod pascal wygenerowany)
  • stosunki tabeli może być logiczne (bez więzów integralności jest używany) lub nie
  • potrzeba zdolności do generowania relacji obiektu z modelu danych
  • dane muszą być konwertowane do obiektu biznesowego i logiki biznesowej manipulowane
  • istniejące komponenty GUI lub te, darmowy należy stosować

Co potrzebne jest:

  • niektóre przewodnie techniki/sugestie z kodem podstawowym próbki/układ aplikacji (takich jak jednostki Klasy-modules-katalogów) ... nie będąc ekspertem w OOP ja się mylić, kiedy mam zaprojektować hierarchii klas
  • proste ramy z samouczka
  • lub nawet swój własny dziennik Kod/framework/podejście

Odpowiedz

2

Spróbuj swoich sił na open source InstantObjects i zawsze będziesz chciał użyć tego do wszelkiego rodzaju programowania baz danych w Delphi.

W IO będziesz musiał zdefiniować całą strukturę danych w swoim interfejsie, a następnie wygeneruje dla ciebie niezbędny kod.

Po prostu spróbuj.

Jeśli chodzi o generację id, zaufaj MySQL, aby wygenerować identyfikator automatycznej inkrementacji dla twojego. Nie tracić czasu na kodowanie tego.

11

Od kiedy używasz Delphi, upewnij się, że patrzysz na DataModules. Tutaj umieszczasz komponenty dostępu do bazy danych i logikę.

Umieszczaj klasy w zwykłych plikach "Jednostki".

Uczyń interfejs użytkownika tymi dwoma, aby wszystko działało. Możesz użyć komponentów dostępu do bazy danych bezpośrednio na formularzu, ale najlepiej zrobić to jako tryb "tylko do wyświetlania" i używać modułu danych do wykonywania operacji na danych. (Możesz zrobić wszystko w formularzu dla podstawowych aplikacji, ale jeśli chcesz modularyzować aplikację, trzymanie jej z dala jest rozsądne).

4

Jednym ze sposobów na wymuszenie tego rodzaju separacji jest napisanie testów jednostkowych dla logiki biznesowej. Poza innymi (istotnymi) korzyściami, testowanie kodu oznacza, że ​​nie może (celowo lub w inny sposób) być ściśle powiązany z interfejsem użytkownika.

Próbuję (ale nie zawsze się uda) zachować szczegóły warstwy danych oddzielnie za pomocą ClientDataSet, niezależnie od tego, co jest używane w back-end (zazwyczaj DBExpress lub DBISAM). Próbuję również napisać przynajmniej kilka testów integracyjnych, aby upewnić się, że warstwa danych działa zgodnie z oczekiwaniami (osobna testowa baza danych o znanych wartościach).

Po wprowadzeniu logiki biznesowej i danych (nawet częściowo) interfejs użytkownika jest znacznie prostszy. I możliwe do utrzymania.

2

Metoda, z której korzystam i działa bardzo dobrze, polega na próbie pobrania różnych rolek z aplikacji, a następnie zaprogramowaniu tak, jakbyś był w tej roli. Na przykład, gdy pracujesz nad bazą danych, nawet nie myśl o gui. Zamiast tego pomyśl o eksponowaniu klas i metod, które działają tylko z danymi. Jeśli stworzysz własny pakiet SDK, który później wykorzystasz, okaże się, że konserwacja tego będzie znacznie łatwiejsza.

Rozwój oparty na testach jest Twoim przyjacielem. Poznaj DUnit i stwórz małe, zwięzłe testy, aby wypróbować dowolny banalny kod. Dokumentuj interfejsy i wszystko, co nie jest widoczne, patrząc na ekran pełen kodu.

3

Osobiście używam tiopf dla modelu biznesowego. Tiopf dostarcza warstwę dostępu do danych. Najnowszy kod z repozytorium zawiera framework mediator gui-mediator podobny do MVC do wyświetlania modelu. Umożliwia to wyświetlanie danych przy użyciu standardowych komponentów delphi.

Tiopf zawiera także kilka generatorów ID (guids, 32-bitowe i 64-bitowe liczby całkowite itp.).

Jeśli jesteś zainteresowany tiopf, sugeruję zacząć od spojrzenia na moją overview. Następnie skieruj wszelkie pytania do grup dyskusyjnych.

1

Chciałbym rzucić okiem na Model-View-Controller (który jest rozszerzeniem Observer/Observable Pattern). Oznacza to, że "widok" (to znaczy interfejs użytkownika) wie tylko, jak zaktualizować dane, a następnie odpowiedzieć na aktualizowane dane. Model (lub obserwowalny) wie, jak manipulować danymi i powiadamiać o widokach, że został zaktualizowany. Oznacza to, że możesz wymienić interfejs użytkownika bez konieczności zmiany dostawcy danych i odwrotnie.

Wykonaj wyszukiwanie w Google, ponieważ istnieje wiele przykładów tego dla Delphi (ale nie tak dużo dla Java/C#, itp.)

Powiązane problemy