[ Pobierz całość w formacie PDF ]
na tabelach strukturami danych.
Jeżeli obiekty modelu dziedziny i tabele bazy danych mogą opierać się na podobnej organizacji,
warto rozważyć połączenie wzorca Domain Model (109) z obiektami Active Record (147). Zalety
modułów tabeli przewyższają korzyści z takiej kombinacji w sytuacji, gdy inne części aplikacji
korzystają ze wspólnej, tabelarycznej struktury danych. Stąd bierze się niewielka popularność
wzorca Table Module (117) w środowisku Java. I to jednak może się zmienić wraz z coraz szer-
szym stosowaniem mechanizmu zestawów wierszy (ang. row set).
Najczęściej spotykanym zastosowaniem wzorca Table Module są projekty oparte na mechani-
zmach Microsoft COM. W środowisku COM (i .NET) zestaw rekordów (Record Set (465)) jest
podstawowym typem repozytorium danych aplikacji. Zestawy rekordów mogą być przekazywane
do interfejsu użytkownika, gdzie specjalne widżety wyświetlają zawarte w nich dane. Biblioteki
Microsoft ADO zapewniają niezbędny mechanizm dostępu do danych struktur relacyjnych. W takim
środowisku moduły tabeli umożliwiają efektywne porządkowanie logiki biznesowej bez utraty
ułatwień w obsłudze tabel, jakie zapewniają różne dostępne programiście aplikacji elementy.
Przykład: uznanie przychodu (C#)
Pora powrócić do przykładu aplikacji obliczającej uznania przychodu (opis na stronie 105), której
implementacje służyły nam do zilustrowania wcześniej omawianych wzorców warstwy dziedziny.
Dla przypomnienia, celem jest tu obliczenie uznania przychodu dla zamówień w sytuacji, gdy re-
guły obliczania różnią się w zależności od produktu, którego dane uznanie dotyczy. Mamy do
czynienia z trzema produktami: edytorami tekstu, arkuszami kalkulacyjnymi i bazami danych.
System modułów tabeli opiera się na pewnym schemacie danych, który zazwyczaj jest mode-
lem relacyjnym (chociaż w przyszłości w podobnych schematach spotkamy się zapewne z mo-
delami XML). W tym przypadku podstawÄ… jest schemat relacyjny przedstawiony na rysunku 9.6.
RYSUN•K 9.6. Schemat bazy danych dla przykÅ‚adu obliczania uznaÅ„ przychodu
TABLE MODULE (MODUA TABELI) 121
Klasy operujące danymi uporządkowane są bardzo podobnie; każdej tabeli odpowiada jeden
moduł tabeli. W architekturze .NET reprezentację struktury bazy danych w pamięci zapewnia
obiekt zbioru danych (ang. data set). Właśnie na takich obiektach powinny operować tworzone
klasy. Każda klasa modułu tabeli ma pole typu . Jest to klasa, która w systemie .NET
odpowiada pojedynczej tabeli zbioru danych. Mogą z niej korzystać wszystkie moduły tabeli i można
ją traktować jako wzorzec Layer Supertype (434).
Konstruktor podklasy wywołuje konstruktor superklasy korzystając ze wskazanej nazwy tabeli.
Umożliwia to utworzenie nowego modułu tabeli przez proste przekazanie zbioru danych do kon-
struktora modułu.
Utrzymujemy w ten sposób kod odpowiedzialny za tworzenie zbioru danych poza modułami tabe-
li, co odpowiada zasadom korzystania z ADO.NET.
Wygodną cechą języka C# jest indeksator (ang. indexer), który umożliwia dostęp do wybranego
wiersza danych tabeli w oparciu o klucz główny.
Pierwszy fragment kodu, w którym implementujemy zachowania, oblicza uznanie przychodu
dla umowy, aktualizując odpowiednio tabelę uznań. Uznawana kwota zależy od produktu, którego
dotyczy. Ponieważ korzystamy przy tym głównie z danych tabeli umów, włączamy odpowiednią
metodę do klasy umów.
122 9. WZORCE LOGIKI DZIEDZINY
Choć we wcześniejszych przykładach używałem w tym miejscu obiektu Money (446), tutaj dla
zróżnicowania wprowadziłem typ . Metoda alokacji jest podobna jak w przypadku klasy
Money (446).
Do przeprowadzenia takich operacji niezbędne są pewne funkcje zdefiniowane w innych kla-
sach. Musimy mieć możliwość pobrania typu każdego produktu. Możliwość tę zapewnimy sobie,
wprowadzając enumerację typów i metodę pobierającą odpowiednią wartość.
Metoda hermetyzuje dane tabeli. Ogólnie rzecz biorąc, bezpośredni odczyt sumy
umowy z kolumny tabeli (jak w przykładzie powyżej) nie jest najlepszym podejściem. Zasada
hermetyzacji powinna objąć poszczególne kolumny danych. Rozwiązanie takie wybrałem ze względu
na założenie, że pracujemy w środowisku, w którym różne części systemu korzystają z bezpośredniego
dostępu do zbioru danych. Gdy zbiór danych jest przekazywany do interfejsu użytkownika, hermety-
zacja również nie jest stosowana. Funkcje dostępu do kolumn stosujemy tylko wtedy, gdy ma to
służyć wprowadzeniu dodatkowej funkcjonalności, takiej jak konwersja ciągu na typ .
TABLE MODULE (MODUA TABELI) 123
Warto w tym miejscu wspomnieć również o tym, że choć w przykładzie stosujemy zbiór danych
[ Pobierz całość w formacie PDF ]
Pokrewne
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- zdrowieiuroda.opx.pl
James Fenimore Cooper The Headsman [txt]
Dwie miśÂ‚ośÂ›ci Mortimer Carole
James P. Hogan Craddle of Saturn
Hyde Christopher Zgromadzenie śÂšwić™tych
2005 Dexter Dearly Devoted Dexter Jeff Lindsay
Barrett Jean Czy masz alibi Intryga i milosc 29
Felix, Net i Nika Tom 13 Klć…twa Domu McKillianów