Forms and Controls

Forms and controls jest wzorcem architektonicznym, który zyskał popularność w latach 90’ dzięki takim narzędziom jak Delphi, Visual Basic czy późniejszym Visual Studio. Jest to także jeden z prostszych wzorców GUI, od którego warto zacząć eksplorację tej grupy. Wzorzec forms and controls dzieli aplikację na dwie grupy modułów - forms (formularze) oraz controls (kontrolki).

Formularze

Głównymi odpowiedzialnościami formularzy są ([1]):

  • Screen layout - definiowanie wyglądu ekranu i układu kontrolek

  • Form logic - implementacja logiki, która nie może być łatwo umieszczona w kontrolkach

Wiele IDE pozwala na graficzne definiowanie i manipulowanie układem ekranu, wybieranie kontrolek z bibliotek kontrolek i umieszczanie ich w odpowiednich miejscach na ekranie. Spowodowało duży wzrost popularności tego wzorca szczególnie podczas projektowania aplikacji desktopowych.

Kontrolki

Główne zadania kontrolek:

  • pobieranie danych wpisywanych przez użytkownika,

  • pobieranie danych pochodzących z innych źródeł - bazy danych, pliki, systemy zewnętrzne etc

  • wyświetlanie danych w odpowiedniej postaci.

Data binding

Stan aplikacji zaprojektowanej zgodnie z tym wzorcem może być zapisany w trzech miejscach [1]:

  • record state - dane zapisane w bazie danych w postaci odpowiedniego rekordu/krotki. Dane takie są współdzielone i dostępne zazwyczaj dla wielu podsystemów i modułów

  • session state - dane zapisane w sesji, którą aplikacja stworzyła dla użytkownika.

  • screen state - dane przechowywane przez elementy graficzne np. kontrolki

Dużym problemem jest więc konieczność synchronizacja stanu aplikacji, tak aby zmiana danych w jednym miejscu powodowała zmianę jej kopii w innym. Z pomocą przychodzi mechanizm data binding, które idea polega na automatycznej synchronizacji stanu pomiędzy różnymi komponentami aplikacji. Jednym ze sposobów implementacji tego mechanizmu jest zastosowanie wzorca observer z formularzami jako obserwatorami i kontrolkami jako obiektami wysyłającymi powiadomienia o zmianie stanu.

Poniżej umieściłem diagram klas dla formularzy i kontrolek:

Klasa TextField reprezentuje kontrolkę, która w momencie zmiany wartości generuje powiadomienie wysyłane do formularza DialogForm. Formularz ten jest obserwatorem zmiany stanu kontrolek w nim osadzonych. Po otrzymaniu powiadomienia formularz może zmodyfikować stan sesji oraz zmienić wartość innej kontrolki przez co uzyskujemy tzw. Data Binding. Komunikację pomiędzy kontrolkami i formularzem reprezentuje poniższy diagram sekwencji:

Bibliografia

Comments