Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00089 008481 11000794 na godz. na dobę w sumie
Architektura systemów zarządzania przedsiębiorstwem. Wzorce projektowe - książka
Architektura systemów zarządzania przedsiębiorstwem. Wzorce projektowe - książka
Autor: Liczba stron: 496
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-715-9 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> wzorce projektowe
Porównaj ceny (książka, ebook, audiobook).

Wykorzystaj wzorce projektowe w pracy nad oprogramowaniem

Systemy informatyczne służące do zarządzania przedsiębiorstwem to zwykle ogromne aplikacje. Operują na milionach rekordów, przesyłają gigabajty danych i są obsługiwane przez dziesiątki użytkowników. Sprawne działanie takiej aplikacji jest niezwykle istotne dla funkcjonowania przedsiębiorstwa, dlatego musi ona być stabilna, a przed wdrożeniem -- gruntownie przetestowana. Przy tworzeniu aplikacji tego typu wykorzystuje się opracowane już rozwiązania, zwane wzorcami projektowymi. Wzorce projektowe to modele poszczególnych komponentów aplikacji -- należy jedynie zaimplementować je w wybranym języku programowania.

Książka 'Architektura systemów zarządzania przedsiębiorstwem. Wzorce projektowe' to przegląd wzorców wykorzystywanych przy projektowaniu aplikacji korporacyjnych. Opisuje zasady podziału aplikacji na warstwy i zasady współpracy pomiędzy warstwami; przedstawia także modele komponentów wchodzących w skład każdej z nich.

Korzystając z zawartych w książce wzorców,
stworzysz stabilne i wydajne aplikacje korporacyjne.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Architektura systemów zarz¹dzania przedsiêbiorstwem. Wzorce projektowe Autor: Martin Fowler T³umaczenie: Pawe³ Koronkiewicz (wstêp, rozdz. 1 – 12), Piotr Rajca (rozdz. 13 – 18, dod. A) ISBN: 83-7361-715-9 Tytu³ orygina³u: Patterns of Enterprise Application Architecture Format: B5, stron: 496 Wykorzystaj wzorce projektowe w pracy nad oprogramowaniem • Zaprojektuj aplikacje o architekturze trójwarstwowej • Dobierz odpowiedni¹ technologiê • Stwórz modu³y aplikacji Systemy informatyczne s³u¿¹ce do zarz¹dzania przedsiêbiorstwem to zwykle ogromne aplikacje. Operuj¹ na milionach rekordów, przesy³aj¹ gigabajty danych i s¹ obs³ugiwane przez dziesi¹tki u¿ytkowników. Sprawne dzia³anie takiej aplikacji jest niezwykle istotne dla funkcjonowania przedsiêbiorstwa, dlatego musi ona byæ stabilna, a przed wdro¿eniem -- gruntownie przetestowana. Przy tworzeniu aplikacji tego typu wykorzystuje siê opracowane ju¿ rozwi¹zania, zwane wzorcami projektowymi. Wzorce projektowe to modele poszczególnych komponentów aplikacji — nale¿y jedynie zaimplementowaæ je w wybranym jêzyku programowania. Ksi¹¿ka „Architektura systemów zarz¹dzania przedsiêbiorstwem. Wzorce projektowe” to przegl¹d wzorców wykorzystywanych przy projektowaniu aplikacji korporacyjnych. Opisuje zasady podzia³u aplikacji na warstwy i zasady wspó³pracy pomiêdzy warstwami; przedstawia tak¿e modele komponentów wchodz¹cych w sk³ad ka¿dej z nich. • Warstwy w aplikacjach biznesowych • Wzorce logiki aplikacji • Wzorce architektury ĥród³a danych • Wzorce mapowania obiektowo-relacyjnego • Wzorce prezentacji • Wzorce dystrybucji • Wzorce stanu sesji • Wzorce podstawowe Korzystaj¹c z zawartych w ksi¹¿ce wzorców, stworzysz stabilne i wydajne aplikacje korporacyjne. Spis treści Przedmowa...............................................................................................................13 Wstęp .......................................................................................................................19 Architektura ...................................................a...................................................a...............................................19 Aplikacje korporacyjne ...................................................a...................................................a..............................20 Rodzaje aplikacji dla przedsiębiorstw...................................................a...........................................................22 Wydajność ...................................................a...................................................a.................................................23 Wzorce...................................................a...................................................a.......................................................25 Struktura opisu wzorców ...................................................a...................................................a.....................27 Ograniczenia wzorców projektowych...................................................a.....................................................28 Część I Wprowadzenie 29 1. Warstwy aplikacji ...................................................................................................31 Podział warstwowy w aplikacjach dla przedsiębiorstw...................................................a.................................32 Trzy główne warstwy...................................................a...................................................a.................................33 Układ warstw ...................................................a...................................................a.............................................35 2. Porządkowanie logiki dziedziny .............................................................................37 Wybór wzorca...................................................a...................................................a............................................40 Warstwa usług...................................................a...................................................a............................................42 3. Mapowanie do relacyjnych baz danych ..................................................................43 Wzorce architektury...................................................a...................................................a...................................43 Problem zachowań ...................................................a...................................................a.....................................47 Odczyt danych ...................................................a...................................................a...........................................48 6 SPIS TREŚCI Wzorce mapowania struktury...................................................a........................................................................49 Mapowanie relacji ...................................................a...................................................a...............................49 Dziedziczenie...................................................a...................................................a.......................................52 Proces budowy mapowania...................................................a...................................................a........................54 Podwójne mapowanie ...................................................a...................................................a..........................55 Metadane...................................................a...................................................a....................................................55 Połączenie z bazą danych...................................................a...................................................a...........................56 Inne problemy mapowania...................................................a...................................................a.........................58 Warto przeczytać ...................................................a...................................................a.......................................58 4. Prezentacja w sieci WWW .....................................................................................59 Wzorce widoku ...................................................a...................................................a..........................................62 Wzorce kontrolera danych wejściowych...................................................a.......................................................64 Warto przeczytać ...................................................a...................................................a.......................................64 5. Przetwarzanie współbieżne.....................................................................................65 Problemy przetwarzania współbieżnego ...................................................a.......................................................66 Konteksty przetwarzania...................................................a...................................................a............................67 Izolacja i niezmienność...................................................a...................................................a..............................68 Optymistyczne i pesymistyczne sterowanie współbieżnością...................................................a.......................68 Zapobieganie niespójnym odczytom...................................................a.......................................................69 Zakleszczenia...................................................a...................................................a.......................................70 Transakcje...................................................a...................................................a..................................................71 ACID ...................................................a...................................................a...................................................72 Zasoby transakcyjne ...................................................a...................................................a............................72 Zwiększanie żywotności przez ograniczanie izolacji...................................................a..............................73 Transakcje biznesowe i systemowe ...................................................a........................................................74 Wzorce sterowania współbieżnością w trybie offline ...................................................a...................................76 Serwery aplikacji ...................................................a...................................................a.......................................77 Warto przeczytać ...................................................a...................................................a.......................................78 6. Stan sesji ..................................................................................................................79 Zalety sesji bezstanowej...................................................a...................................................a.............................79 Stan sesji ...................................................a...................................................a....................................................80 Metody przechowywania danych stanu sesji ...................................................a..........................................81 7. Obiekty rozproszone ...............................................................................................85 Zwodnicze obiekty rozproszone ...................................................a...................................................................85 Interfejsy lokalne i interfejsy zdalne ...................................................a.............................................................86 Kiedy stosować architekturę rozproszoną...................................................a.....................................................87 Granice dystrybucji...................................................a...................................................a....................................88 Interfejsy dystrybucji ...................................................a...................................................a.................................89 SPIS TREŚCI 8. 7 Podsumowanie .........................................................................................................91 Warstwa dziedziny, czyli początek ...................................................a...............................................................92 Warstwa źródła danych, czyli krok drugi...................................................a......................................................93 Źródło danych dla schematu Transaction Script (110) ...................................................a...........................93 Źródło danych dla schematu Table Module (125) ...................................................a..................................93 Źródło danych dla schematu Domain Model (116)...................................................a.................................94 Warstwa prezentacji...................................................a...................................................a...................................94 Wzorce a technologia...................................................a...................................................a.................................95 Java i J2EE...........................................a...................................................a...................................................95 .NET ...................................................a...................................................a....................................................96 Procedury przechowywane ...................................................a...................................................a..................97 Usługi WWW ...................................................a...................................................a......................................97 Inne systemy warstw aplikacji ...................................................a......................................................................98 Część II Wzorce 9. 101 Wzorce logiki dziedziny .......................................................................................103 Transaction Script (Skrypt transakcji)...................................................a.........................................................103 Na czym polega ...................................................a...................................................a.................................103 Kiedy używamy ...................................................a...................................................a.................................105 Problem obliczania przychodu...................................................a..............................................................105 Domain Model (Model dziedziny)...................................................a..............................................................109 Na czym polega ...................................................a...................................................a.................................109 Kiedy używamy ...................................................a...................................................a.................................111 Warto przeczytać ...................................................a...................................................a...............................112 Przykład: uznanie przychodu (Java) ...................................................a.....................................................112 Table Module (Moduł tabeli)...................................................a......................................................................117 Na czym polega ...................................................a...................................................a.................................118 Kiedy używamy ...................................................a...................................................a.................................120 Przykład: uznanie przychodu (C#)...................................................a........................................................120 Service Layer (Warstwa usług)...................................................a...................................................................124 Na czym polega ...................................................a...................................................a.................................125 Kiedy używamy ...................................................a...................................................a.................................127 Warto przeczytać ...................................................a...................................................a...............................127 Przykład: uznanie przychodu (Java) ...................................................a.....................................................127 10. Wzorce architektury źródła danych ......................................................................133 Table Data Gateway (Brama danych tabeli) ...................................................a...............................................133 Na czym polega...................................................a...................................................a..................................133 Kiedy używamy ...................................................a...................................................a.................................134 Warto przeczytać ...................................................a...................................................a...............................135 Przykład: brama tabeli osób (C#) ...................................................a.........................................................135 Przykład: brama oparta na zbiorach danych ADO.NET (C#) ...................................................a...............137 8 SPIS TREŚCI Row Data Gateway (Brama danych wiersza)...................................................a..............................................140 Na czym polega ...................................................a...................................................a.................................140 Kiedy używamy ...................................................a...................................................a.................................142 Przykład: brama rekordu osoby (Java)...................................................a..................................................142 Przykład: uchwyt danych dla obiektu dziedziny (Java) ...................................................a........................146 Active Record (Rekord aktywny) ...................................................a...............................................................147 Na czym polega ...................................................a...................................................a.................................147 Kiedy używamy ...................................................a...................................................a.................................148 Przykład: prosta tabela osób (Java)...................................................a.......................................................148 Data Mapper (Odwzorowanie danych) ...................................................a.......................................................152 Na czym polega ...................................................a...................................................a.................................152 Kiedy używamy ...................................................a...................................................a.................................156 Przykład: proste odwzorowanie obiektowo-relacyjne (Java)...................................................a................157 Przykład: wyłączanie metod wyszukujących (Java) ...................................................a.............................162 Przykład: tworzenie obiektu pustego (Java)...................................................a..........................................165 11. Wzorce zachowań dla mapowania obiektowo-relacyjnego .................................169 Unit of Work (Jednostka pracy) ...................................................a..................................................................169 Na czym polega ...................................................a...................................................a.................................170 Kiedy używamy ...................................................a...................................................a.................................173 Przykład: rejestracja przez obiekt (Java)...................................................a...............................................174 Identity Map (Mapa tożsamości)...................................................a.................................................................178 Na czym polega ...................................................a...................................................a.................................178 Kiedy używamy ...................................................a...................................................a.................................180 Przykład: metody mapy tożsamości (Java) ...................................................a...........................................181 Lazy Load (Opóźnione ładowanie) ...................................................a.............................................................182 Na czym polega ...................................................a...................................................a.................................182 Kiedy używamy ...................................................a...................................................a.................................184 Przykład: opóźniona inicjalizacja (Java)...................................................a...............................................185 Przykład: wirtualny pośrednik (Java)...................................................a....................................................185 Przykład: uchwyt wartości (Java) ...................................................a.........................................................187 Przykład: widmo (C#)...................................................a...................................................a........................188 12. Wzorce struktury dla mapowania obiektowo-relacyjnego ..................................197 Identity Field (Pole tożsamości)...................................................a..................................................................197 Na czym polega ...................................................a...................................................a.................................197 Kiedy używamy ...................................................a...................................................a.................................201 Warto przeczytać ...................................................a...................................................a...............................201 Przykład: liczba całkowita jako klucz (C#)...................................................a...........................................201 Przykład: tabela kluczy (Java) ...................................................a..............................................................203 Przykład: klucz złożony (Java) ...................................................a.............................................................205 Foreign Key Mapping (Odwzorowanie do klucza obcego)...................................................a.........................216 Na czym polega ...................................................a...................................................a.................................216 Kiedy używamy ...................................................a...................................................a.................................218 Przykład: odwołanie jednowartościowe (Java) ...................................................a.....................................219 Przykład: wyszukiwanie w wielu tabelach (Java)...................................................a.................................222 Przykład: kolekcja odwołań (C#)...................................................a..........................................................223 SPIS TREŚCI 9 Association Table Mapping (Odwzorowanie do tabeli asocjacji) ...................................................a...............226 Na czym polega ...................................................a...................................................a.................................226 Kiedy używamy ...................................................a...................................................a.................................227 Przykład: pracownicy i umiejętności (C#)...................................................a............................................227 Przykład: odwzorowanie z kodem SQL (Java) ...................................................a.....................................230 Przykład: jedno zapytanie do obsługi wielu pracowników (Java)...................................................a.........234 Dependent Mapping (Odwzorowanie składowych) ...................................................a....................................239 Na czym polega ...................................................a...................................................a.................................239 Kiedy używamy ...................................................a...................................................a.................................240 Przykład: albumy i ścieżki (Java) ...................................................a.........................................................241 Embedded Value (Wartość osadzona) ...................................................a........................................................244 Na czym polega ...................................................a...................................................a.................................244 Kiedy używamy ...................................................a...................................................a.................................244 Warto przeczytać ...................................................a...................................................a...............................245 Przykład: prosty obiekt wartości (Java) ...................................................a................................................245 Serialized LOB (Duży obiekt serializowany)...................................................a..............................................247 Na czym polega ...................................................a...................................................a.................................247 Kiedy używamy ...................................................a...................................................a.................................248 Przykład: serializowanie hierarchii działów firmy do postaci XML (Java) .............................................249 Single Table Inheritance (Odwzorowanie dziedziczenia do pojedynczej tabeli) ...........................................252 Na czym polega ...................................................a...................................................a.................................252 Kiedy używamy ...................................................a...................................................a.................................253 Przykład: tabela zawodników (C#) ...................................................a.......................................................253 Class Table Inheritance (Odwzorowanie dziedziczenia do tabel klas)...................................................a........259 Na czym polega ...................................................a...................................................a.................................259 Kiedy używamy ...................................................a...................................................a.................................260 Warto przeczytać ...................................................a...................................................a...............................260 Przykład: zawodnicy (C#)...................................................a...................................................a..................260 Concrete Table Inheritance (Odwzorowanie dziedziczenia do tabel konkretnych)........................................266 Na czym polega ...................................................a...................................................a.................................266 Kiedy używamy ...................................................a...................................................a.................................268 Przykład: zawodnicy (C#)...................................................a...................................................a..................268 Inheritance Mappers (Klasy odwzorowania dziedziczenia) ...................................................a........................274 Na czym polega ...................................................a...................................................a.................................275 Kiedy używamy ...................................................a...................................................a.................................276 13. Wzorce odwzorowań obiektów i relacyjnych metadanych .................................277 Metadata Mapping (Odwzorowanie metadanych) ...................................................a......................................277 Na czym polega ...................................................a...................................................a.................................277 Kiedy używamy ...................................................a...................................................a.................................279 Przykład: użycie metadanych i odzwierciedlania (Java)...................................................a.......................280 Query Object (Obiekt zapytania) ...................................................a................................................................287 Na czym polega ...................................................a...................................................a.................................287 Kiedy używamy ...................................................a...................................................a.................................288 Warto przeczytać ...................................................a...................................................a...............................289 Przykład: prosty wzorzec Obiekt zapytania (Java) ...................................................a...............................289 Repository (Magazyn)...................................................a...................................................a..............................293 Na czym polega ...................................................a...................................................a.................................294 Kiedy używamy ...................................................a...................................................a.................................295 Warto przeczytać ...................................................a...................................................a...............................296 Przykład: odnajdywanie osób utrzymywanych przez podaną osobę (Java) .............................................296 Przykład: zamiana strategii wzorca Repository (Java)...................................................a..........................297 10 14. SPIS TREŚCI Wzorce prezentacji internetowych........................................................................299 Model View Controller (Model kontrolera widoku) ...................................................a...................................299 Na czym polega ...................................................a...................................................a.................................299 Kiedy używamy ...................................................a...................................................a.................................301 Page Controller (Kontroler strony) ...................................................a.............................................................302 Na czym polega ...................................................a...................................................a.................................302 Kiedy używamy ...................................................a...................................................a.................................303 Przykład: prosta prezentacja z serwletem pełniącym funkcję kontrolera oraz stroną JSP pełniącą rolę widoku (Java) ...................................................a.....................................304 Przykład: zastosowanie strony JSP do obsługi żądania (Java)...................................................a..............306 Przykład: mechanizm obsługi stron wykorzystujący kod schowany (C#) ............................................309 Front Controller (Kontroler fasady) ...................................................a............................................................313 Na czym polega ...................................................a...................................................a.................................313 Kiedy używamy ...................................................a...................................................a.................................315 Warto przeczytać ...................................................a...................................................a...............................315 Przykład: prosta prezentacja (Java)...................................................a.......................................................315 Template View (Szablon widoku)...................................................a...............................................................318 Na czym polega ...................................................a...................................................a.................................318 Kiedy używamy ...................................................a...................................................a.................................322 Przykład: wykorzystanie JSP jako widoku wraz z osobnym kontrolerem (Java).....................................322 Przykład: strona ASP.NET (C#) ...................................................a...........................................................325 Transform View (Widok przekształcający)...................................................a.................................................328 Na czym polega ...................................................a...................................................a.................................328 Kiedy używamy ...................................................a...................................................a.................................329 Przykład: proste przekształcenie (Java) ...................................................a................................................330 Two Step View (Widok dwuetapowy)...................................................a........................................................332 Na czym polega ...................................................a...................................................a.................................332 Kiedy używamy ...................................................a...................................................a.................................333 Przykład: dwuetapowe przekształcenie XSLT (XSLT) ...................................................a........................338 Przykład: JSP i znaczniki niestandardowe (Java) ...................................................a.................................340 Application Controller (Kontroler aplikacji)...................................................a...............................................345 Na czym polega ...................................................a...................................................a.................................345 Kiedy używamy ...................................................a...................................................a.................................347 Warto przeczytać ...................................................a...................................................a...............................347 Przykład: kontroler aplikacji obsługujący model stanu (Java)...................................................a..............347 15. Wzorce dystrybucji ...............................................................................................353 Remote Facade (Zdalna fasada) ...................................................a..................................................................353 Na czym polega ...................................................a...................................................a.................................354 Kiedy używamy ...................................................a...................................................a.................................357 Przykład: zastosowanie komponentu session bean i zdalnej fasady (Java)..............................................357 Przykład: usługa WWW (C#) ...................................................a...................................................a............360 Data Transfer Object (Obiekt transferu danych) ...................................................a.........................................366 Na czym polega ...................................................a...................................................a.................................366 Kiedy używamy ...................................................a...................................................a.................................370 Warto przeczytać ...................................................a...................................................a...............................371 Przykład: przekazywanie informacji o albumach (Java)...................................................a.......................371 Przykład: serializacja danych do postaci XML (Java) ...................................................a..........................375 SPIS TREŚCI 16. 11 Wzorce współbieżności autonomicznej................................................................379 Optimistic Offline Lock (Optymistyczna blokada autonomiczna)...................................................a..............379 Na czym polega ...................................................a...................................................a.................................380 Kiedy używamy ...................................................a...................................................a.................................383 Przykład: warstwa dziedziny i wzorzec Data Mappers (165) (Java)...................................................a..........384 Pessimistic Offline Lock (Pesymistyczna blokada autonomiczna) ...................................................a.............389 Na czym polega ...................................................a...................................................a.................................390 Kiedy używamy ...................................................a...................................................a.................................393 Przykład: prosty menedżer blokad (Java) ...................................................a.............................................394 Coarse-Grained Lock (Blokada gruboziarnista)...................................................a..........................................400 Na czym polega ...................................................a...................................................a.................................400 Kiedy używamy ...................................................a...................................................a.................................402 Przykład: wspólna blokada Optimistic Offline Lock (416) (Java)...................................................a........403 Przykład: wspólna blokada Pessimistic Offline Lock (426) (Java)...................................................a.......408 Przykład: blokowanie korzenia przy użyciu blokady Pessimistic Offline Lock (416) (Java)...................409 Implicit Lock (Blokada domyślna) ...................................................a.............................................................410 Na czym polega ...................................................a...................................................a.................................411 Kiedy używamy ...................................................a...................................................a.................................412 Przykład: niejawna blokada Pessimistic Offline Lock (426) (Java)...................................................a......412 17. Wzorce stanu sesji.................................................................................................415 Client Session State (Stan sesji klienta) ...................................................a......................................................415 Na czym polega ...................................................a...................................................a.................................415 Kiedy używamy ...................................................a...................................................a.................................416 Server Session State (Stan sesji serwera) ...................................................a....................................................418 Na czym polega ...................................................a...................................................a.................................418 Kiedy używamy ...................................................a...................................................a.................................420 Database Session State (Stan sesji bazy danych) ...................................................a........................................421 Na czym polega ...................................................a...................................................a.................................421 Kiedy używamy ...................................................a...................................................a.................................423 18. Wzorce podstawowe .............................................................................................425 Gateway (Brama) ...................................................a...................................................a.....................................425 Na czym polega ...................................................a...................................................a.................................426 Kiedy używamy ...................................................a...................................................a.................................426 Przykład: brama pośrednicząca w korzystaniu z usługi rozsyłania komunikatów (Java).........................427 Mapper (Odwzorowanie) ...................................................a...................................................a.........................432 Na czym polega ...................................................a...................................................a.................................432 Kiedy używamy...................................................a...................................................a..................................433 Layer Supertype (Typ bazowy warstwy) ...................................................a....................................................434 Na czym polega ...................................................a...................................................a.................................434 Kiedy używamy ...................................................a...................................................a.................................434 Przykład: obiekt domeny (Java)...................................................a............................................................434 Separated Interface (Interfejs oddzielony) ...................................................a..................................................435 Na czym polega ...................................................a...................................................a.................................435 Kiedy używamy ...................................................a...................................................a.................................437 12 SPIS TREŚCI Registry (Rejestr) ...................................................a...................................................a.....................................438 Na czym polega ...................................................a...................................................a.................................438 Kiedy używamy ...................................................a...................................................a.................................440 Przykład: rejestr bazujący na wzorcu Singleton (Java)...................................................a.........................440 Przykład: rejestr nadający się do zastosowania w środowiskach wielowątkowych (Java).......................442 Value Object (Obiekt wartości)...................................................a...................................................................444 Na czym polega ...................................................a...................................................a.................................444 Kiedy używamy ...................................................a...................................................a.................................445 Money (Pieniądze) ...................................................a...................................................a...................................446 Na czym polega ...................................................a...................................................a.................................446 Kiedy używamy ...................................................a...................................................a.................................448 Przykład: klasa Money (Java)...................................................a...............................................................449 Special Case (Przypadek szczególny) ...................................................a.........................................................453 Na czym polega ...................................................a...................................................a.................................453 Kiedy używamy ...................................................a...................................................a.................................454 Warto przeczytać ...................................................a...................................................a...............................454 Przykład: prosta implementacja pustego obiektu (C#)...................................................a..........................454 Plugin...................................................a...................................................a.......................................................456 Na czym polega ...................................................a...................................................a.................................456 Kiedy używamy ...................................................a...................................................a.................................457 Przykład: generator identyfikatorów (Java) ...................................................a..........................................457 Service Stub (Usługa zastępcza) ...................................................a.................................................................461 Na czym polega ...................................................a...................................................a.................................461 Kiedy używamy ...................................................a...................................................a.................................462 Przykład: usługa podatkowa (Java)...................................................a.......................................................462 Record set (Zbiór rekordów)...................................................a.......................................................................465 Na czym polega ...................................................a...................................................a.................................465 Kiedy używamy ...................................................a...................................................a.................................467 Dodatki 469 Bibliografia ............................................................................................................471 Skorowidz ..............................................................................................................477 9 Wzorce logiki dziedziny Transaction Script (Skrypt transakcji) Porządkuje logikę dziedziny w procedury, gdzie każda procedura obsługuje pojedyncze żądanie warstwy prezentacji. Pracę większości aplikacji biznesowych można rozpatrywać jako przetwarzanie sekwencji trans- akcji. Transakcja może polegać na przeglądaniu danych w pewien określony sposób lub wprowa- dzaniu w nich zmian. Każda interakcja między systemem klienckim a systemem serwera obejmuje pewną część logiki aplikacji. W pewnych przypadkach interakcja może być tak prosta jak wy- świetlanie przechowywanych w bazie danych. W innym może wymagać wielu operacji sprawdza- nia poprawności i obliczeń. Wzorzec Transaction Script porządkuje logikę takiej interakcji jako, ogólnie rzecz biorąc, pojedynczą procedurę, która wywołuje bazę danych bezpośrednio lub za pośrednictwem prostego kodu osłaniającego. Każda transakcja ma własny skrypt. Dodatkową optymalizacją może być łą- czenie wspólnych fragmentów kodu w podprocedury. Na czym polega Gdy stosujemy wzorzec Transaction Script, logika domeny porządkowana jest zasadniczo według wykonywanych w systemie transakcji. Gdy celem transakcji jest wprowadzenie rezerwacji pokoju hotelowego, kod pojedynczej procedury Zarezerwuj Pokój obejmuje sprawdzenie dostępności po- koi, określenie wysokości opłaty i zaktualizowanie bazy danych. 104 9. WZORCE LOGIKI DZIEDZINY W prostych przypadkach sposób porządkowania skryptów transakcji jest naturalny. Oczywi- ście, podobnie jak w każdym programie, powinniśmy wprowadzić przejrzystą strukturę modułów. O ile transakcja nie jest szczególnie skomplikowana, jest to bardzo proste. Jedną z zalet skryptów transakcji jest to, że nie ma dla nich znaczenia, jakie operacje wykonują inne transakcje. Zadaniem implementowanego kodu jest przyjęcie danych wejściowych, odczytanie danych z bazy, prze- kształcenie ich, a następnie zapisanie wyników w bazie. O tym, gdzie umieścimy skrypt transakcji, decyduje przyjęty system warstw aplikacji. Loka- lizacją taką może być strona serwera, skrypt CGI lub rozproszony obiekt sesji. Dobrze jest roz- dzielać skrypty tak dalece, jak to możliwe. Absolutnym minimum są osobne procedury. Jeszcze lepsze są klasy, oddzielone również od kodu prezentacji i źródła danych. Dodatkowo, w skryptach transakcji nie wprowadzamy żadnych wywołań logiki prezentacji. Ułatwia to ich modyfikowanie i testowanie. Skrypty transakcji można porządkować w klasy dwoma sposobami. Najbardziej typowym podejściem jest łączenie w jednej klasie grupy skryptów. Każda klasa odpowiada wtedy pewnemu zakresowi tematycznemu. Układ taki jest przejrzysty i sprawdza się w praktyce. Inną możliwością jest umieszczanie każdego skryptu w osobnej klasie (patrz rysunek 9.1). Odpowiada to wzorcowi Command Gang of Four. Definiujemy wtedy również supertyp takich poleceń, który określa pew- ną metodę uruchamiania skryptów. Pozwala to operować skryptami jako obiektami. Trzeba przy- znać, że potrzeba taka pojawia się stosunkowo rzadko, ze względu na prostotę systemów, gdzie stosuje się wzorzec Transaction Script. Oczywiście, wiele języków pozwala zapomnieć o klasach i definiować funkcje globalne. Nie można jednak zapominać, że tworzenie egzemplarzy obiektów pomaga izolować dane różnych wątków przetwarzania. RYSUNEK 9.1. Skrypty transakcji jako polecenia Termin „skrypt transakcji” jest o tyle uzasadniony, że w większości przypadków każdy z nich odpowiada pojedynczej transakcji bazy danych. Nie jest to reguła obowiązująca we wszystkich przypadkach, ale jest stosunkowo dobrym przybliżeniem. TRANSACTION SCRIPT (SKRYPT TRANSAKCJI) 105 Kiedy używamy Wielką zaletą skryptów transakcji jest ich prostota. Porządkowanie logiki przy ich użyciu jest bar- dzo naturalne, gdy cała aplikacja zawiera niewiele kodu. Nie wprowadzamy dodatkowych pozio- mów złożoności ani elementów obniżających wydajność. Gdy logika biznesowa staje się bardziej skomplikowana, utrzymanie porządku w skryptach transakcji staje się coraz bardziej skomplikowane. Podstawowym problemem są powtórzenia ko- du. Ponieważ każdy skrypt ma obsłużyć dokładnie jedną transakcję, powtórne wprowadzanie ta- kich samych lub podobnych fragmentów jest nieuniknione. Uważny programista uniknie większości takich problemów, jednak większe aplikacje wyma- gają zbudowania modelu dziedziny. Wzorzec Domain Model (109) zapewnia znacznie więcej opcji strukturalizowania kodu, większą przejrzystość i ograniczenie problemu powtórzeń. Trudno określić poziom złożoności, na którym skrypty transakcji nie mogą być zastosowane. Będzie to jeszcze trudniejsze, jeżeli przyzwyczailiśmy się do jednego z wzorców. Można oczywiście przekształcić skrypty transakcji w model dziedziny, ale nie jest to zmiana prosta, więc dobrze by- łoby zastanowić się nad właściwym podejściem już na samym początku. Bez względu na to, jak bardzo lubimy podejście obiektowe, nie powinniśmy skreślać wzorca Transaction Script. Jest wiele prostych problemów i stosowanie dla nich prostych rozwiązań po- zwala szybciej zakończyć pracę. Problem obliczania przychodu Do zilustrowania tego i dalszych wzorców logiki dziedziny będę używał tego samego problemu. Poniżej przedstawiam jego opis, którego już przy kolejnych wzorcach nie będę niepotrzebnie powtarzał. Obliczanie uznania przychodu (ang. revenue recognition) to dość typowe dla systemów biz- nesowych zagadnienie. Podstawowym problemem jest to, kiedy można zaksięgować otrzymany przychód (ang. revenue). Gdy sprzedaję filiżankę kawy, sytuacja jest prosta: wydaję kawę, biorę pieniądze i natychmiast wprowadzam odpowiednią kwotę do książki przychodów. Nie zawsze jednak jest tak łatwo. Wyobraźmy sobie, że dostaję zaliczkę na ten rok. Nawet jeżeli jest to nie- wielka kwota, jej natychmiastowe wprowadzenie do książki może nie być możliwe, ponieważ usługa będzie wykonana dopiero na przestrzeni tego roku. Jedną z możliwości może być wprowa- dzanie jednej dwunastej tej kwoty w każdym kolejnym miesiącu, na wypadek, gdyby umowa zo- stała nagle rozwiązana. Jest wiele różnych i często zmiennych reguł obliczania przychodu na potrzeby urzędu skar- bowego. Część ustala ustawa, inne wynikają ze standardów księgowości, jeszcze inne — z we- wnętrznych zasad firmy. Śledzenie przychodu może być bardzo złożonym zagadnieniem. Nie będziemy się tutaj wgłębiać w szczegóły tego procesu. Wyobraźmy sobie jedynie fir- mę, która sprzedaje trzy rodzaje towarów: edytory tekstu, bazy danych i arkusze kalkulacyjne. Zgodnie z przyjętymi zasadami, całość przychodu z umowy sprzedaży (ang. contract) edytora tekstu może zostać zaksięgowana od razu. W przypadku arkusza kalkulacyjnego, jedną trzecią przychodu wprowadzamy od razu, jedną trzecią po sześćdziesięciu dniach i pozostałą jedną trzecią po dziewięćdziesięciu dniach. Gdy sprzedajemy bazę danych, jedną trzecią wprowadzamy od razu, jedną trzecią po trzydziestu dniach i jedną trzecią po sześćdziesięciu dniach. Oczywi- ście zasady te niewiele mają wspólnego z rzeczywistością i mają służyć jedynie zilustrowaniu oma- wianych zagadnień. 106 9. WZORCE LOGIKI DZIEDZINY RYSUNEK 9.2. Uproszczony model obliczania przychodu. Każda umowa obejmuje wiele wartości przychodu, powiązanych z określeniem, kiedy różne części przychodu trafiają do ksiąg Przykład: uznanie przychodu (Java) W niniejszym przykładzie stosujemy dwa skrypty transakcji: jeden do obliczania uznań przychodu dla danej umowy i drugi do określenia, jaka kwota przychodu z danej umowy została uznana do określonego dnia. Baza danych ma trzy tabele: towarów (ang. products), umów (ang. contracts) i uznań przychodu (ang. revenue recognitions). 4 #6 6#$. RTQFWEVU + KPVRTKOCT[MG[PCOGXCTEJCTV[RGXCTEJCT 4 #6 6#$. EQPVTCEVU + KPVRTKOCT[MG[RTQFWEVKPVTGXGPWGFGEKOCNFCVG5KIPGF FCVG 4 #6 6#$. TGXGPWG4GEQIPKVKQPU EQPVTCEVKPVCOQWPVFGEKOCNTGEQIPK\GF1PFCVG 24+/#4;- ; EQPVTCEVTGEQIPK\GF1P Pierwszy skrypt oblicza kwotę uznania na dany dzień. Można ją wyliczyć w dwóch krokach: w pierw- szym wybieramy wiersze tabeli uznań przychodu, w drugim sumujemy kwoty. Projekty oparte na wzorcu Transaction Script korzystają często ze skryptów, które operują bezpośrednio na bazie danych, wykorzystując kod SQL. W tym przykładzie korzystamy z prostej bramy Table Data Gateway (133) jako osłony zapytań SQL. Ze względu na prostotę przykładu, użyjemy tylko jednej, wspólnej bramy, nie tworząc osobnych dla każdej tabeli. Definiujemy w jej obrębie odpowiednią metodę wyszukiwania, HKPF4GEQIPKVKQPU(QT. ENCUU)CVGYC[ RWDNKE4GUWNV5GVHKPF4GEQIPKVKQPU(QT NQPIEQPVTCEV+ /H CVGCUQH VJTQYU53. ZEGRVKQP] 2TGRCTGF5VCVGOGPVUVOVFDRTGRCTG5VCVGOGPV HKPF4GEQIPKVKQPU5VCVGOGPV  UVOVUGV.QPI EQPVTCEV+  UVOVUGV CVG CUQHVQ5SN CVG  4GUWNV5GVTGUWNVUVOVGZGEWVG3WGT[  TGVWTPTGUWNV _ RTKXCVGUVCVKEHKPCN5VTKPIHKPF4GEQIPKVKQPU5VCVGOGPV 5 . 6COQWPV (41/TGXGPWG4GEQIPKVKQPU 9* 4 EQPVTCEV!#0 TGEQIPK\GF1P! RTKXCVG QPPGEVKQPFD TRANSACTION SCRIPT (SKRYPT TRANSAKCJI) 107 Drugi skrypt służy do podsumowania danych przekazanych przez bramę. ENCUU4GEQIPKVKQP5GTXKEG RWDNKE/QPG[TGEQIPK\GF4GXGPWG NQPIEQPVTCEV0WODGT/H CVGCUQH ] /QPG[TGUWNV/QPG[FQNNCTU   VT[] 4GUWNV5GVTUFDHKPF4GEQIPKVKQPU(QT EQPVTCEV0WODGTCUQH  YJKNG TUPGZV ] TGUWNVTGUWNVCFF /QPG[FQNNCTU TUIGV$KI GEKOCN COQWPV  _ TGVWTPTGUWNV _ECVEJ 53. ZEGRVKQPG ]VJTQYPGY#RRNKECVKQP ZEGRVKQP G  _ _ W przypadku tak prostych obliczeń, procedura w języku Java mogłaby również zostać zastąpiona wywołaniem SQL, które sumuje wartości przy użyciu funkcji agregującej. Podobny podział stosujemy przy obliczaniu uznań przychodu dla wybranej umowy. Skrypt warstwy dziedziny realizuje logikę biznesową. ENCUU4GEQIPKVKQP5GTXKEG RWDNKEXQKFECNEWNCVG4GXGPWG4GEQIPKVKQPU NQPIEQPVTCEV0WODGT ] VT[] 4GUWNV5GVEQPVTCEVUFDHKPF QPVTCEV EQPVTCEV0WODGT  EQPVTCEVUPGZV  /QPG[VQVCN4GXGPWG/QPG[FQNNCTU EQPVTCEVUIGV$KI GEKOCN TGXGPWG  /H CVGTGEQIPKVKQP CVGPGY/H CVG EQPVTCEVUIGV CVG FCVG5KIPGF  5VTKPIV[RGEQPVTCEVUIGV5VTKPI V[RG  KH V[RGGSWCNU 5 ] /QPG[=?CNNQECVKQPVQVCN4GXGPWGCNNQECVG   FDKPUGTV4GEQIPKVKQP  EQPVTCEV0WODGTCNNQECVKQP=?TGEQIPKVKQP CVG  FDKPUGTV4GEQIPKVKQP  EQPVTCEV0WODGTCNNQECVKQP=?TGEQIPKVKQP CVGCFF C[U   FDKPUGTV4GEQIPKVKQP  EQPVTCEV0WODGTCNNQECVKQP=?TGEQIPKVKQP CVGCFF C[U   _GNUGKH V[RGGSWCNU 9 ] FDKPUGTV4GEQIPKVKQP EQPVTCEV0WODGTVQVCN4GXGPWGTGEQIPKVKQP CVG  _GNUGKH V[RGGSWCNU   ] /QPG[=?CNNQECVKQPVQVCN4GXGPWGCNNQECVG   FDKPUGTV4GEQIPKVKQP  EQPVTCEV0WODGTCNNQECVKQP=?TGEQIPKVKQP CVG  FDKPUGTV4GEQIPKVKQP  EQPVTCEV0WODGTCNNQECVKQP=?TGEQIPKVKQP CVGCFF C[U   FDKPUGTV4GEQIPKVKQP  EQPVTCEV0WODGTCNNQECVKQP=?TGEQIPKVKQP CVGCFF C[U   _ _ECVEJ 53. ZEGRVKQPG ]VJTQYPGY#RRNKECVKQP ZEGRVKQP G  _ _ 108 9. WZORCE LOGIKI DZIEDZINY Zwróćmy uwagę na użycie klasy Money (446) do alokacji. Zapobiega ona gubieniu pojedynczych groszy (lub centów), o co łatwo przy dzieleniu kwot pieniężnych przez trzy. Obsługa SQL jest zrealizowana w formie wzorca Table Data Gateway (133). Pierwsza procedura znajduje umowę. ENCUU)CVGYC[ RWDNKE4GUWNV5GVHKPF QPVTCEV NQPIEQPVTCEV+ VJTQYU53. ZEGRVKQP] 2TGRCTGF5VCVGOGPVUVOVFDRTGRCTG5VCVGOGPV HKPF QPVTCEV5VCVGOGPV  UVOVUGV.QPI EQPVTCEV+  4GUWNV5GVTGUWNVUVOVGZGEWVG3WGT[  TGVWTPTGUWNV _ RTKXCVGUVCVKEHKPCN5VTKPIHKPF QPVTCEV5VCVGOGPV 5 . 6  (41/EQPVTCEVUERTQFWEVUR 9* 4 + !#0 ERTQFWEVUR+  Druga procedura to osłona instrukcji +05 46. ENCUU)CVGYC[ RWDNKEXQKFKPUGTV4GEQIPKVKQP NQPIEQPVTCEV+ /QPG[COQWPV/H CVGCUQH VJTQYU53. ZEGRVKQP] 2TGRCTGF5VCVGOGPVUVOVFDRTGRCTG5VCVGOGPV KPUGTV4GEQIPKVKQP5VCVGOGPV  UVOVUGV.QPI EQPVTCEV+  UVOVUGV$KI GEKOCN COQWPVCOQWPV  UVOVUGV CVG CUQHVQ5SN CVG  UVOVGZGEWVG7RFCVG  _ RTKXCVGUVCVKEHKPCN5VTKPIKPUGTV4GEQIPKVKQP5VCVGOGPV +05 46+061TGXGPWG4GEQIPKVKQP8#.7 5 !!!  Gdy używamy języka Java, usługa obliczania uznań dochodu może mieć postać tradycyjnej klasy lub obiektu bean sesji. Czytelnik, który nie jest przyzwyczajony do modelowania dziedziny, uzna prawdopodobnie przedstawioną tu implementację za znacznie prostszą niż przedstawiona w opisie wzorca Domain Model (109). Niestety, nieco trudniej w zwięzły sposób przedstawić (lub wyobrazić sobie), co sta- nie się, gdy reguły biznesowe będą bardziej skomplikowane. Stosowane w praktyce reguły obli- czania uznań przychodu nie są proste, a różnice między nimi wyznacza nie tylko produkt, którego dotyczą, ale i data operacji („jeżeli umowa została podpisana przed 15 kwietnia, obowiązuje taka a taka reguła”). Gdy poziom złożoności jest duży, utrzymanie spójnej konstrukcji skryptów trans- akcji jest bardzo trudne, co doskonale uzasadnia przywiązanie miłośników podejścia obiektowego do stosowania modeli dziedziny. DOMAIN MODEL (MODEL DZIEDZINY) 109 Domain Model (model dziedziny) Obiektowy model dziedziny, obejmujący wymagane zachowania i dane. Logika biznesowa może osiągnąć bardzo duży poziom złożoności. Reguły i logika opisują wiele różnych przypadków i wariantów zachowań, a właśnie rozwiązanie problemu złożoności było główną przesłanką stworzenia koncepcji obiektów. Model dziedziny to sieć takich połączonych ze sobą obiektów, gdzie każdy obiekt reprezentuje pewien znaczący element lub czynnik. Elementy te mogą być tak znaczne jak przedsiębiorstwo lub tak niewielkie jak pojedynczy wiersz formularza zamówienia. Na czym polega Wprowadzenie w aplikacji wzorca Domain Model (109) wymaga stworzenia dość rozbudowanej koncepcyjnie warstwy obiektów, które modelują rozwiązywany problem. Należą do nich obiekty reprezentujące dane przedsiębiorstwa i obiekty odpowiadające regułom jego pracy. Dane i procesy najczęściej łączy się ze sobą, aby skupić czynności przetwarzania i informacje, którymi operują. Obiektowy model dziedziny może przypominać model bazy danych, zawsze jednak dzielą je istotne różnice. Model dziedziny łączy dane i procesy, ma wielowartościowe atrybuty, złożoną sieć asocjacji i wykorzystuje dziedziczenie. Można wyróżnić dwa rodzaje modeli dziedziny. Prosty model przypomina projekt bazy da- nych i dominuje w nim układ „jeden obiekt modelu-jedna tabela bazy danych”. Rozbudowany model dziedziny znacznie odbiega od struktury bazy i wykorzystuje dziedziczenie, strategie i inne wzorce Gang of Four, jak również złożone sieci niewielkich, połączonych ze sobą obiektów. Takie 110 9. WZORCE LOGIKI DZIEDZINY podejście jest lepsze, gdy logika jest bardziej skomplikowana, trudniej jednak wówczas przepro- wadzić mapowanie do bazy. W prostym modelu można korzystać z aktywnych rekordów (Active Record (147)), rozbudowany wymaga mechanizmu Data Mapper (152). Ponieważ funkcje biznesowe wymagają zawsze wielu późniejszych zmian, ważna jest możli- wość łatwego modyfikowania, kompilowania i testowania warstwy, w której są implementowane. Musimy więc dbać o t
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Architektura systemów zarządzania przedsiębiorstwem. Wzorce projektowe
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: