You are on page 1of 25

Java.

Tworzenie aplikacji
sieciowych za pomoc
Springa, Hibernate i Eclipse
Autor: Anil Hemrajani
Tumaczenie: Konrad Rymczak,
Grzegorz Skorczyski, Ewa Bucka
ISBN: 978-83-246-0682-5
Tytu oryginau: Agile Java Development
with Spring, Hibernate and Eclipse
Format: B5, stron: 352
Tworzenie zaawansowanych projektw korporacyjnych w Javie
Poznaj sprawdzone metodologie i procesy
Naucz si stosowa praktyczne technologie i narzdzia
Twrz w Javie kompletne rozwizania w optymalny sposb
Chciaby tworzy rozbudowane aplikacje w jzyku Java szybciej i w prostszy sposb?
Liczne narzdzia i technologie budowania programw w Javie czsto uatwiaj wykonywanie
niektrych zada, ale jednoczenie niepotrzebnie komplikuj i wyduaj proces
powstawania gotowych produktw. Jak dobra odpowiednie techniki i zastosowa
metodologi, ktra usprawni i przyspieszy prac? Niektrzy ju to wiedz Ty te
moesz skorzysta z ich dowiadcze!
Java. Tworzenie aplikacji sieciowych za pomoc Spring, Hibernate i Eclipse to
praktyczny poradnik opisujcy wydajn i sprawdzon metodologi szybkiego pisania
oprogramowania w jzyku Java. Dziki tej ksice poznasz techniki programowania
ekstremalnego oraz metodologii Agile i nauczysz si stosowa je podczas pracy nad
programami. Dowiesz si, jak zaprojektowa aplikacj, przygotowa rodowisko
i korzysta z wiersza polece oraz proponowanego zestawu narzdzi platformy Spring,
mechanizmu odwzorowa Hibernate i IDE Eclipse co pozwoli Ci w prosty sposb uy
zaawansowanych rozwiza.

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Techniki programowania ekstremalnego (XP)


Wprowadzenie do metodologii Agile
Korzystanie z platformy Spring
Utrwalanie obiektw za pomoc Hibernate
Praca w IDE Eclipse
Debugowanie oprogramowania
Monitorowanie i profilowanie aplikacji
Refaktoryzacja kodu
Zwiksz sw wydajno dziki zastosowaniu efektywnych procesw i narzdzi do
tworzenia oprogramowania w jzyku Java.

Spis treci

Przedmowa .................................................................................... 13
O autorze ....................................................................................... 17
Podzikowania ............................................................................... 19
Wstp ............................................................................................ 23

Cz I

Wprowadzenie .............................................................. 31

Rozdzia 1. Wstp ............................................................................................ 33


Co jest omawiane w tym rozdziale? ................................................................................ 34
Technologie uyte w tej ksice ...................................................................................... 34
Technologie uruchomieniowe ................................................................................... 36
Narzdzia programistyczne ....................................................................................... 38
Metodologie wytwarzania oprogramowania uyte w tej ksice .................................... 42
Podsumowanie ................................................................................................................. 43
Rekomendowane rda .................................................................................................. 43

Rozdzia 2. Przykadowa aplikacja: Time Expression .......................................... 45


Co jest omawiane w tym rozdziale? ................................................................................ 46
Wymagania biznesowe .................................................................................................... 47
Metodologie wytwarzania oprogramowania ................................................................... 48
Informacje wstpne o XP i AMDD ........................................................................... 48
Etap bada ................................................................................................................. 50
Etap planowania ........................................................................................................ 51
Etap wydania a iteracje (etapowe wytwarzanie oprogramowania) ........................... 52
Zakres projektu .......................................................................................................... 52
Utrzymanie ................................................................................................................ 53
Stosujemy XP i AMDD w naszej przykadowej aplikacji .............................................. 53
Model domenowy ...................................................................................................... 53
Prototyp interfejsu uytkownika (UI) ....................................................................... 53
Scenopis .................................................................................................................... 57
Historie uytkownika ................................................................................................ 57
Plan wyda (i iteracji) ............................................................................................... 60
Sownik ...................................................................................................................... 61
Architektura tablicowa .............................................................................................. 62

Java. Tworzenie aplikacji sieciowych za pomoc Springa, Hibernate i Eclipse


Uwaga na temat oprogramowania Wiki .......................................................................... 63
Podsumowanie ................................................................................................................. 63
Rekomendowane rda .................................................................................................. 64

Cz II

Tworzymy przykadow aplikacj ................................... 65

Rozdzia 3. Metodologie XP i AMDD ................................................................. 67


Co jest omawiane w tym rozdziale? ................................................................................ 68
Projektowanie i wybr artefaktw ................................................................................... 69
Diagram architektury ....................................................................................................... 70
Od historii uytkownika do projektu ............................................................................... 71
Analizujemy klasy przy pomocy kart CRC ..................................................................... 71
Mapa przepywu aplikacji (artefakt domowej roboty) .................................................... 73
Technika uzupeniajca ............................................................................................. 74
Rozszerzamy map przepywu aplikacji o kolumny CRUD ..................................... 74
UML diagram klas ...................................................................................................... 74
Diagramy pakietw UML ................................................................................................ 76
Struktura katalogw ......................................................................................................... 77
Przykadowe nazwy plikw ............................................................................................. 77
Wytwarzanie oprogramowania od pocztku do koca .................................................... 78
Testy akceptacyjne .......................................................................................................... 78
Logowanie ................................................................................................................. 79
Lista kart pracy .......................................................................................................... 79
Wprowad godziny ................................................................................................... 79
Inne rozwaania ............................................................................................................... 79
Podsumowanie ................................................................................................................. 80
Rekomendowane rda .................................................................................................. 82

Rozdzia 4. Konfiguracja rodowiska: JDK, Ant i JUnit ....................................... 83


Co jest omawiane w tym rozdziale? ................................................................................ 84
Java Platform Standard Edition Development Kit (JDK) ............................................... 84
Struktura katalogw ......................................................................................................... 85
Ant ................................................................................................................................... 86
Prosty plik budujcy .................................................................................................. 86
Zoony plik budujcy ............................................................................................... 87
JUnit ................................................................................................................................. 90
Samodzielnie uruchomiony JUnit ............................................................................. 91
JUnit z poziomu Eclipse ............................................................................................ 92
SimpleTest: sprawiamy, e wszystkie narzdzia wsppracuj razem ............................ 92
SimpleTest.java ......................................................................................................... 93
Rodzaje metod assert w JUnit ................................................................................... 93
Uruchamiamy SimpleTest (pojedynczy test JUnit) .................................................. 94
Uruchamiamy testy JUnit jako zadanie Anta ............................................................ 95
Wstpne testy i refaktoryzacja ......................................................................................... 96
Podsumowanie ................................................................................................................. 97
Rekomendowane rda .................................................................................................. 98

Rozdzia 5. Hibernate zapewniamy trwao obiektw ................................... 99


Co jest omawiane w tym rozdziale? .............................................................................. 100
Zarys odwzorowania obiektowo-relacyjnego
(Object-Relational Mapping ORM) ....................................................................... 101
Relacje i liczebno ................................................................................................. 102
Tosamo obiektu .................................................................................................. 103
Kaskada ................................................................................................................... 103

Spis treci

7
Odwzorowanie ........................................................................................................ 103
Obiekty w pamici kontra obiekty trwae ............................................................... 104
Projekt naszej przykadowej bazy danych ..................................................................... 104
Denormalizacja ........................................................................................................ 104
Konwencje nazewnicze ........................................................................................... 105
Uwagi do projektowania bazy danych .................................................................... 106
Skrypt DDL ............................................................................................................. 106
Gdzie w naszej aplikacji znajduje si HSQLDB i Hibernate? ...................................... 107
HSQLDB ....................................................................................................................... 108
Serwer HSQLDB i przydatne zadania Anta ............................................................ 108
HSQLDB Database Manager i SqlTool .................................................................. 109
Tryby persistent i in-memory w HSQLDB ............................................................. 109
Doczamy HSQLDB do archiwum naszej aplikacji .............................................. 110
Pracujemy z Hibernate ................................................................................................... 110
Nie potrzeba DAO ani DTO .................................................................................... 111
Obsugiwane bazy danych ....................................................................................... 111
Hibernate i EJB 3.x ................................................................................................. 111
Przykadowy test konfiguracji Hibernate ................................................................ 112
Instalacja Hibernate ................................................................................................. 115
Podstawy pracy z Hibernate .................................................................................... 117
Tworzymy TimesheetManager.java, korzystajc z Hibernate ................................ 120
Employee.* i DepartmentManager.java .................................................................. 124
Pliki wymagane w ciece klas ............................................................................... 124
Uruchamiamy zestaw testw przy pomocy Anta .................................................... 124
Usuwamy rekordy ................................................................................................... 125
Interfejs Criteria ...................................................................................................... 125
Obsuga wyjtkw ................................................................................................... 126
Pozostae funkcje Hibernate .......................................................................................... 127
Asocjacje ................................................................................................................. 127
Blokowanie obiektw (kontrola wspbienoci) ................................................... 127
Jeszcze wicej Hibernate ......................................................................................... 129
Podsumowanie ............................................................................................................... 129
Rekomendowane rda ................................................................................................ 130

Rozdzia 6. Wprowadzenie do Spring Framework ............................................. 133


Co jest omawiane w tym rozdziale? .............................................................................. 135
Czym jest Spring? .......................................................................................................... 135
Pakiety Springa suce do rozwijania aplikacji ........................................................... 136
Pakiety Springa suce do wdraania aplikacji ............................................................ 137
Przegld moduw Springa ............................................................................................ 138
Spring Core ............................................................................................................. 138
Spring Context ......................................................................................................... 138
Spring AOP ............................................................................................................. 138
Spring DAO ............................................................................................................. 138
Spring ORM ............................................................................................................ 140
Gdzie w naszej architekturze jest miejsce Spring Framework? .................................... 140
Korzyci pynce z uycia Springa ................................................................................ 141
Gwne koncepcje Springa ............................................................................................ 142
Wzorzec wstrzykiwania zalenoci (i kontenery IoC) ............................................ 143
Dwa style wstrzykiwana .......................................................................................... 143
Bean, BeanFactory i ApplicationContext ................................................................ 144
Edytory waciwoci ............................................................................................... 146
Podprojekty Springa ...................................................................................................... 146
Podsumowanie ............................................................................................................... 147
Rekomendowane rda ................................................................................................ 147

Java. Tworzenie aplikacji sieciowych za pomoc Springa, Hibernate i Eclipse

Rozdzia 7. Framework Spring Web MVC ........................................................ 149


Co jest omawiane w tym rozdziale? .............................................................................. 150
Zalety Spring MVC ....................................................................................................... 150
Pojcia zwizane ze Spring Web MVC ......................................................................... 152
Spring MVC a Java ................................................................................................. 152
Konfiguracja Spring MVC ...................................................................................... 155
Konfiguracja Springa dla Time Expression ................................................................... 156
Instalowanie kontenera serwletw (Apache Tomcat) ............................................. 157
Instalowanie Spring Framework ............................................................................. 158
Uruchomienie SpringTest ....................................................................................... 159
Konfiguracja Spring MVC ...................................................................................... 159
Budowanie interfejsu uytkownika z pomoc Springa ................................................. 160
Ekran: Lista kart pracy ............................................................................................ 160
Ekran: Wprowad godziny ...................................................................................... 161
Kaskadowe arkusze stylw (Cascading Style Sheets CSS) ...................................... 162
Ekran: Lista kart pracy przykad kontrolera bez formularza .................................... 163
Konfiguracja krok po kroku .................................................................................... 163
Kodowanie krok po kroku ....................................................................................... 164
Ekran: Wprowad godziny przykad kontrolera formularza .................................... 168
Konfiguracja krok po kroku .................................................................................... 168
Kodowanie krok po kroku ....................................................................................... 170
Wizanie do niestandardowych (niebiznesowych) obiektw polecenia ................. 174
DateUtil.java ........................................................................................................... 175
Dyrektywy taglib w JSP .......................................................................................... 175
Widok bez kontrolera .................................................................................................... 175
Obiekty przechwytujce w Springu ............................................................................... 175
Uwierzytelnianie w Time Expression ..................................................................... 176
Nasza przykadowa aplikacja pierwsze uruchomienie ............................................. 177
Nowe biblioteki znacznikw w Spring Framework 2.0 ................................................ 177
Sowo o Spring Web Flow i Portlet API ....................................................................... 180
Spring Web Flow .................................................................................................... 180
Spring Portlet API ................................................................................................... 180
Podsumowanie ............................................................................................................... 181
Rekomendowane rda ................................................................................................ 181

Rozdzia 8. Fenomen rodowiska Eclipse ........................................................ 183


Co jest omawiane w tym rozdziale? .............................................................................. 184
Fundacja Eclipse ............................................................................................................ 185
Eclipse platforma i projekty ..................................................................................... 186
Koncepcje zwizane z Eclipse SDK .............................................................................. 188
Workspace przestrze projektw ....................................................................... 189
Workbench obszar roboczy, perspektywy, edytory i widoki ............................. 189
Projekt ..................................................................................................................... 191
Pluginy .................................................................................................................... 192
Kreatory ................................................................................................................... 192
Instalacja Eclipse ........................................................................................................... 192
Konfiguracja Eclipse na potrzeby Time Expression ..................................................... 195
Java Development Tools (JDT) narzdzia programistyczne dla Javy ...................... 200
Instalacja pluginw WTP zestawu narzdzi do rozwoju aplikacji sieciowych ........ 208
Praca z Eclipse rozwijamy Time Expression ........................................................... 209
Wbudowane pluginy JDT ........................................................................................ 210
Plugin z kategorii Data (dla HSQLDB) .................................................................. 212
Pluginy do obsugi serwerw (dla Tomcata) ........................................................... 212
Plugin Hibernate ...................................................................................................... 214

Spis treci

9
Plugin Spring IDE ................................................................................................... 215
Inne godne uwagi pluginy WTP .............................................................................. 217
Wicej Eclipse? Tak, jest peno pluginw ..................................................................... 217
Projekty Eclipse.org ................................................................................................ 217
Katalogi pluginw ................................................................................................... 218
MyEclipseIDE.com ................................................................................................. 218
Google.com ............................................................................................................. 219
Wsparcie dla pracy zespoowej w Eclipse ..................................................................... 219
System pomocy w Eclipse ............................................................................................. 220
Wskazwki i porady ...................................................................................................... 220
Skrty klawiaturowe ............................................................................................... 221
Preferencje ............................................................................................................... 224
Zakadki ................................................................................................................... 225
Uruchamianie zewntrznych narzdzi i przegldarki WWW ................................. 225
Historia lokalna ....................................................................................................... 226
Resetowanie perspektywy ....................................................................................... 226
Kopiowanie elementw ........................................................................................... 226
Czyszczenie projektw ............................................................................................ 226
Konwersja znakw koca linii ................................................................................ 227
Parametry startowe Eclipse/JVM ............................................................................ 227
Przegldanie obcego kodu ....................................................................................... 227
Ukryte pliki Eclipse ................................................................................................. 227
Deinstalowanie Eclipse .................................................................................................. 227
Subiektywne porwnanie do IntelliJ i NetBeans ........................................................... 228
IntelliJ 5.0 ................................................................................................................ 228
NetBeans 5.0 ........................................................................................................... 229
Porwnanie czasw uruchomienia .......................................................................... 230
Podsumowanie ............................................................................................................... 231
Rekomendowane rda ................................................................................................ 232

Cz III Zaawansowane cechy ................................................ 233


Rozdzia 9. Zapis logw, debugowanie, monitorowanie i profilowanie ................. 235
Co jest omawiane w tym rozdziale? .............................................................................. 236
Opis koncepcji zapisu logw ......................................................................................... 237
Zapis logw przy uyciu biblioteki Jakarta Commons Logging (z wykorzystaniem
Log4j oraz JDK) .......................................................................................................... 238
Jak dziaa JCL? ........................................................................................................ 239
Programowanie z uyciem JCL ............................................................................... 239
Priorytety komunikatw .......................................................................................... 240
Przykad zapisu logw w TimesheetListController ................................................ 241
Uwaga na temat klas formatujcych ....................................................................... 242
Wykorzystanie logowania w Spring i Hibernate ..................................................... 242
Debugowanie aplikacji w Javie z wykorzystaniem rodowiska Eclipse ....................... 242
Koncepcje i cechy debugera JDT ............................................................................ 243
Debugowanie aplikacji internetowych z uyciem Firefoksa ......................................... 247
Debuger JavaScript ................................................................................................. 247
Web Developer ........................................................................................................ 248
Inne rozszerzenia Firefoksa ..................................................................................... 248
Konsola JavaScript .................................................................................................. 249
Caociowe debugowanie klasy TimesheetManagerTest (od przegldarki do bazy
danych) ........................................................................................................................ 249
Zarzdzanie i monitorowanie z wykorzystaniem technologii JMX .............................. 251
Programy profilujce w Javie ........................................................................................ 252

10

Java. Tworzenie aplikacji sieciowych za pomoc Springa, Hibernate i Eclipse


Porady przy debugowaniu ............................................................................................. 252
Podsumowanie ............................................................................................................... 253
Rekomendowane rda ................................................................................................ 254

Rozdzia 10. Elementy zaawansowane .............................................................. 257


Co jest omawiane w tym rozdziale? .............................................................................. 258
Nowoci w Javie 1.5 ...................................................................................................... 258
Importy statyczne .................................................................................................... 259
Typy sparametryzowane generics ...................................................................... 259
Ulepszone ptle ....................................................................................................... 259
Automatyczne opakowywanie autoboxing ........................................................ 260
Typ wyliczeniowy enum .................................................................................... 260
Zmienna liczba argumentw ................................................................................... 260
Inne nowoci ........................................................................................................... 261
Zadania narzdzia Ant ................................................................................................... 261
CVS ......................................................................................................................... 262
Exec ......................................................................................................................... 262
Get ........................................................................................................................... 262
Sleep ........................................................................................................................ 262
Ftp ............................................................................................................................ 263
Mail ......................................................................................................................... 263
Obfito zada! ....................................................................................................... 263
JUnit ............................................................................................................................... 264
Niestandardowe zestawy testowe ............................................................................ 264
Powtarzajcy si kod ............................................................................................... 264
Hibernate ....................................................................................................................... 265
Natywne zapytania SQL .......................................................................................... 265
Obiekty przechwytujce .......................................................................................... 266
Spring Framework ......................................................................................................... 266
Zadania zaplanowane .............................................................................................. 267
Spring wsparcie dla poczty elektronicznej ......................................................... 268
Wsparcie dla JMX ................................................................................................... 269
Wicej Springa ........................................................................................................ 271
Integracja Spring i Hibernate ......................................................................................... 272
Konfiguracja zarzdzania transakcjami w Spring ................................................... 272
Mniejszy i czystszy kod .......................................................................................... 274
Testy jednostkowe naszego zintegrowanego kodu ................................................. 276
Podejcie bazujce na interfejsie ............................................................................. 276
Biblioteka znacznikw JSP ........................................................................................... 277
Displaytag ................................................................................................................ 277
Wasna biblioteka znacznikw ................................................................................ 278
Refaktoryzacja ............................................................................................................... 279
Przykady refaktoryzacji w naszej aplikacji ............................................................ 279
Refaktoryzuj bezlitonie, ale zachowaj kopi kodu ............................................ 280
Zasoby internetowe zwizane z refaktoryzacj (refactoring.com i agiledata.org) ...... 281
Uwaga na temat refaktoryzacji w Eclipse ............................................................... 281
Inne rozwaania ............................................................................................................. 281
Zarzdzanie transakcjami ........................................................................................ 281
Bezpieczestwo aplikacji ........................................................................................ 283
Obsuga wyjtkw ................................................................................................... 285
czenie w klastry ......................................................................................................... 287
Wielowtkowo ........................................................................................................... 287
Uwaga na aplikacje Javy z GUI (grubych klientw) ..................................................... 288
Zarzdzanie konfiguracj rodowisk ............................................................................. 289

Spis treci

11
AJAX Asynchroniczny JavaScript i XML ............................................................... 290
Javadoc i komentarze ..................................................................................................... 290
Cay system w jednym pliku WAR ............................................................................... 291
Podsumowanie ............................................................................................................... 291
Rekomendowane rda ................................................................................................ 292

Rozdzia 11. Co dalej? ..................................................................................... 293


Co jest omawiane w tym rozdziale? .............................................................................. 294
Jak ukoczy aplikacj Time Expression ...................................................................... 294
Metodologie XP i AMDD ............................................................................................. 295
Platforma Java ............................................................................................................... 295
Ant ................................................................................................................................. 295
JUnit ............................................................................................................................... 296
Hibernate ....................................................................................................................... 296
Spring Framework ......................................................................................................... 297
Eclipse SDK .................................................................................................................. 297
Zapis logw, debugowanie, monitorowanie i profilowanie .......................................... 298
Gdzie szuka pomocy? .................................................................................................. 299
Fora dyskusyjne ....................................................................................................... 299
Javadoc i kod rdowy ........................................................................................... 299
Krtka uwaga na temat narzdzi do sprawdzania jakoci kodu ................................. 300
Podsumowanie ............................................................................................................... 300
Rekomendowane rda ................................................................................................ 301

Rozdzia 12. Kocowe przemylenia ................................................................. 303


Moje plany na najblisz przyszo ............................................................................. 304
Przyszo, metodologia Agile, technologia Java ......................................................... 304
Wiwat! ........................................................................................................................... 305

Cz IV Dodatki ...................................................................... 307


Dodatek A Kod rdowy ................................................................................ 309
Wspdzielony katalog bibliotek zewntrznych ............................................................ 309
Katalog przykadowej aplikacji ..................................................................................... 310
Pliki Ant .................................................................................................................. 311
Pliki bazy danych HSQLDB ................................................................................... 311
Konfiguracja (pliki) Javy ........................................................................................ 311
Katalog przykadowej aplikacji wersja po refaktoryzacji ........................................ 313
Integracja Spring i Hibernate katalog przykadowej aplikacji ................................. 313

Dodatek B Koczymy refaktoryzowa kod przykadowej aplikacji .................... 315


SignInController.java: monitorowanie JMX ................................................................. 315
TimesheetListController.java: monitorowanie JMX ..................................................... 316
Klasy zarzdzajce: integracja Spring i Hibernate ........................................................ 316
timesheetlist.jsp: przechodzimy na plik doczany i bibliotek Displaytag .................. 317
enterhours.jsp: przechodzimy na plik doczany i bibliotek znacznikw
Timex Tag ................................................................................................................... 318
Klasy *Test i TimexTestCase ........................................................................................ 318
DateUtil.java: nowa metoda .......................................................................................... 319
timex.css: nowe style ..................................................................................................... 319
timexhsqldb.xml: naprawiamy bd w danych .............................................................. 319

12

Java. Tworzenie aplikacji sieciowych za pomoc Springa, Hibernate i Eclipse

Dodatek C Konwencje pisania kodu w Javie ................................................... 321


Dodatek D Zabezpieczamy aplikacj sieciow ................................................ 323
Dodatek E

cigawka z przykadowego procesu wytwarzania oprogramowania ...325


Pocztki projektu ........................................................................................................... 325
Faza bada ..................................................................................................................... 326
Planowanie ..................................................................................................................... 326
Iteracyjne wytwarzanie oprogramowania ...................................................................... 326

Dodatek F

cigawka z modelowania Agile .................................................... 327

Dodatek G cigawka z programowania ekstremalnego (XP) .......................... 329


Dodatek H Ciekawe narzdzia ........................................................................ 331
Narzdzia wieloplatformowe ......................................................................................... 331
Narzdzia dla Windows ................................................................................................. 332
Narzdzia dla Mac OS X ............................................................................................... 333
Narzdzia dla Linuksa (KDE) ....................................................................................... 333

Dodatek I

Badania Visual Patterns ............................................................... 335


Definicja problemu ........................................................................................................ 335
Przeszo: jak oszukiwalimy sami siebie ................................................................... 335
Przyszo: metody Agile .............................................................................................. 337
Mj punkt widzenia ....................................................................................................... 338
BRUF i BDUF ......................................................................................................... 339
Terminologia ........................................................................................................... 339
Chcesz doczy do spoecznoci? ................................................................................ 339

Skorowidz .................................................................................... 341

Rozdzia 3. Metodologie XP i AMDD

67

Rozdzia 3.

W tym rozdziale w kocu zabierzemy si za technologiczn stron projektu, wic od


teraz zaczyna si prawdziwa zabawa.
W prawdziwie iteracyjnym rodowisku programistycznym wszystkie zagadnienia dotyczce architektury i projektowania nie musz by koniecznie definiowane na samym
pocztku. Refaktoryzacja (poprawianie kodu bez naruszania funkcjonalnoci) odgrywa

Cz II Tworzymy przykadow aplikacj

68

wan rol w staej poprawie pocztkowo opracowanego projektu, poniewa cigle


bdziesz znajdowa lepsze sposoby implementacji pewnych funkcji. Ponadto kiedy zakres
projektu jest wstpnie zdefiniowany, to wymagania uytkownika mog cigle si rozwija; jest to lepsze rozwizanie ni blokowanie z gry jakichkolwiek zmian. Dobrym
pomysem, oprcz zmiennych wymaga, jest interakcja z uytkownikami, dajca moliwo zadawania pyta.
Chocia cz pracy moe zosta wykonana na pocztku, na przykad historie uytkownika, wysokopoziomowa architektura, prototypy interfejsu uytkownika, model domenowy, standardy itd., to inne zagadnienia projektowe powinny by rozwizane w iteracji, ktra obejmuje dany problem. Ponadto, jak bdziesz mg zobaczy w rozdziaach
5. i 7., wstpne pisanie testw moe rwnie pomc w projektowaniu Twoich klas.
Nie musisz wic mie dopracowanych wszystkich szczegw na samym pocztku; inaczej
mwic, moesz stosowa przy projektowaniu podejcie w locie (ang. just-in-time).
Jednake naley opracowa jakikolwiek wstpny projekt, by moe w iteracji 0 (by
moe bdziesz chcia zaprezentowa dowd koncepcji projektu (ang. proof-of-concept),
pokaza, jak technologie dziaaj od pocztku do koca, od interfejsu uytkownika do
bazy danych).
Prawdopodobnie w iteracjach 1. i 2. zostanie zaimplementowana mniejsza liczba
historii uytkownika, poniewa potrzeba dodatkowego czasu na projekt i przygotowanie rodowiska pracy w tym model domenowy (omwiony pniej), definicje
obiektw biznesowych, konwencje nazw Javy, proces (skrypt) budowania (integracji)
wsplny dla zespou itd.

W tym rozdziale chc pokaza od pocztku do koca metodologi AMDD (Agile Model
Driven Development; agilemodeling.com) i metody programowania ekstremalnego
(XP; extremeprogramming.org).

Co jest omawiane w tym rozdziale?


W tym rozdziale zrealizujemy zaoenia architektury i projektu przyjte dla naszej przykadowej aplikacji Time Expression:
t Przygotujemy diagram architektury.
t Zbadamy obiekty, korzystajc z kart CRC.
t Opracujemy map witryny (diagram przepywu UI).
t Wykonamy diagramy klas i pakietw dla Time Expression.
t Zaoymy struktur katalogw do przechowywania naszych plikw (ktre

utworzymy w kolejnych rozdziaach).


t Przyjrzymy si krokom, ktre wykonamy w nastpnych rozdziaach w celu

kompletnego oprogramowania naszych ekranw.

Rozdzia 3. Metodologie XP i AMDD

69

t Przejrzymy list zaawansowanych poj, ktre bdziemy musieli rozway,

tworzc nasz przykadow aplikacj: obsuga wyjtkw, zadania zaplanowane,


zarzdzanie transakcjami, zapis logw i inne.

Projektowanie i wybr artefaktw


W poprzednim rozdziale przyjrzelimy si metodologii XP i jej zastosowaniu przy definiowaniu wymaga biznesowych i pracy z klientem. W tym rozdziale pjdziemy o krok
dalej i opracujemy minimaln architektur i projekt, aby uatwi prac przy tworzeniu
Time Expression, korzystajc z popularnych technologii: Hibernate, Spring Framework,
Eclipse SDK i wielu innych zwizanych z nimi narzdzi, na przykad Anta, JUnit itp.
Jeli natkne si na mit, e programici XP nie projektuj i nie dokumentuj swojej
pracy, to mam nadziej, e zmienisz bdne zdanie na ten temat pod koniec rozdziau.
Pozwl, e przedstawi Ci podstawowe informacje na ten temat.
Spjrz na rysunek 3.1, ktry pokazuje kilka moliwych artefaktw, jakie moesz zrealizowa w kolejnej wersji lub iteracji. Artefakty na poziomie wydania s to te, ktre tworzysz przed nowym wydaniem; analogicznie artefakty na poziomie iteracji s wytwarzane
przed kad iteracj. Nie jest to obowizkowe dla kadego projektu, wic moemy
wybra i uywa tego, czego naprawd potrzebujemy. Jednake pomidzy rozdziaem 2.,
Przykadowa aplikacja: Time Expression, a tym rozdziaem zdecydowaem si zaprezentowa jak najwicej praktycznych informacji o Time Expression. Na kocu tego
rozdziau poka inny diagram, ktry bdzie wiza razem wszystkie artefakty, ktre
powstay w wyniku naszych wysikw pomidzy poprzednim i tym rozdziaem (ale nie
oszukuj i nie zagldaj tam teraz, poniewa jest to szczegowy diagram i nie chciabym
Ci nim teraz przytoczy).

Rysunek 3.1. XP (AMDD) poziom wydania i poziom iteracji

To, co zobaczysz w tym rozdziale, da Ci przynajmniej pewien punkt widzenia. Ten proces moe (lub te nie) zadziaa w Twoim przypadku. Jednake musz by jakie pozytywne aspekty uycia tych metodologii, poniewa deweloperzy uwielbiaj je i widziaem
wiele pomylnie ukoczonych projektw, ktre byy wynikiem ich uycia. Ponadto
w naszym przypadku artefakty przedstawione w tym rozdziale s istotne dla reszty tej
ksiki i omwiony proces moe nam tutaj pomc.
Jak wida na rysunku 3.1, mamy do stworzenia w tym rozdziale kilka artefaktw, wic
zacznijmy prac. Jednake zanim zaczniemy, chciabym dostarczy dwch punktw
widzenia uytkownikw XP.

70

Cz II Tworzymy przykadow aplikacj

Szef projektu pracujcy w firmie Fortune 50 powiedzia mi ostatnio: Kiedy zaczynamy iteracj, to pierwszy jej dzie zwykle spdzamy na przegldaniu historii i dzieleniu ich na zadania. wiczenie polegajce na dzieleniu zada jest tak naprawd sesj
projektow. Na koniec wida, e okoo 20% czasu kadej iteracji deweloperzy powicaj na projektowanie. Jeli dodasz czas wykorzystywany przez wszystkich deweloperw w czasie wszystkich iteracji, to otrzymasz du liczb, ktra obala stwierdzenie
bez projektu.
Aby da Ci rwnie inny punkt widzenia na metodologi XP, przedstawi rozwaania
starszego architekta, ktry od duszego czasu pracuje w brany IT i ukoczy wiele
projektw przy pomocy metodologii XP i AMDD: Jest rwnie inny poziom projektowania XP dzienny. Refaktoryzacja jest czci projektowania. Chocia pocztkowy
projekt iteracji jest wanym krokiem, to projektowanie po napisaniu kodu tworzy rnice
pomidzy projektem dobrym a naprawd eleganckim.
Rnice tkwice w podejciu do XP dotycz architektury i projektowania w caym procesie wytwarzania, a nie tylko na pocztku projektu. Inaczej mwic, aplikacja cigle
ewoluuje w cigu rnych iteracji. Korzyci pync z takiego podejcia jest to, e projektowanie dotyczy tego, co aktualnie tworzysz, a nie pochania od trzech do szeciu
miesicy przed kodowaniem, w sytuacji gdy wymagania mog ewoluowa w dzisiejszym
cigle zmieniajcym si wiecie.

Diagram architektury
Rysunek 3.2 przedstawia diagram opisujcy architektur naszej przykadowej aplikacji.
Zauwa, e zosta zmieniony na form elektroniczn z wersji tablicowej, jak widziae
w poprzednim rozdziale. Konwersja na form elektroniczn jest kwesti gustu; mgby
zrobi zdjcie aparatem cyfrowym diagramu znajdujcego si na tablicy, ale osobicie
wol jasne i czytelne diagramy.

Rysunek 3.2. Diagram architektury dla Time Expression

Architektura jest dosy prosta. Mamy trzy standardowe warstwy architektury sieciowej
z warstw klienta (przegldarka WWW), warstw rodkow (serwer aplikacji) i nasz
warstw danych (baza danych).

Rozdzia 3. Metodologie XP i AMDD

71

Ponadto uywamy standardu model-widok-kontroler (MVC); jest to wzorzec projektowy


stosowany w wikszoci aplikacji sieciowych bazujcych na jzyku Java. Kontroler
jest punktem wejcia da sieciowych (HTTP), kontroluje widok i model. Model zajmuje si danymi, ktre zostay uzyskane z kontrolera i s przekazywane do widoku,
ten z kolei jest odpowiedzialny za wywietlenie danych. W naszym przypadku widok
stworzymy za pomoc JSP (JavaServer Pages).
To, co czyni nasz architektur interesujc, to nie fakt, e korzysta ze wzorca MVC,
ale to, e warstwa rodkowa zawiera Spring Framework i Hibernate, dwie technologie
omwione szczegowo w dalszej czci tej ksiki. Hibernate, jak bdziesz mg zobaczy pniej, zapewnia proste utrwalanie obiektw w bazie danych, poniewa pozwala
traktowa tabele i rekordy jak plain old Java objects (POJO). Spring Framework
(springframework.org) dostarcza wielu korzyci, szczeglnie jeli pracujesz z obiektami
POJO. Na przykad uyjemy Spring MVC jako naszego frameworka sieciowego, poniewa chcemy uczyni kod bardziej przejrzystym (w porwnaniu na przykad ze Struts). Inn
wart uwagi cech frameworka Spring jest wsparcie dla zada zaplanowanych, niezalenych od zewntrznych usug, takich jak CRON w systemach uniksowych lub Harmonogram zada w Windows. Oczywicie, gwn zalet jest dostarczana przez Spring
funkcja odwrcenia kontroli (ang. inversion of control IoC), o ktrej dowiemy si
wicej w dalszych rozdziaach.

Od historii uytkownika do projektu


Omwilimy rne historie uytkownika w rozdziale 2. Dla zachowania zwizoci nie
zaimplementujemy ich wszystkich w tej ksice. Jednake historie, ktre wybraem,
dostarcz Ci kompletnych, dziaajcych przykadw, obejmujcych ekrany zarwno
zawierajce formularze, jak i niezawierajce ich. Dodatkowo przyjrzymy si zawansowanym elementom takim jak implementacja zabezpiecze za pomoc obiektw przechwytujcych (ang. interceptors), wysyanie e-maili i zadania zaplanowane, ktre dotycz kilku historii omwionych w rozdziale 2.
W dalszej czci rozdziau dostarcz przykadw bazujcych na dwch historiach
uytkownika, nazwanych w rozdziale 2. Wprowad godziny i Lista kart pracy.

Analizujemy klasy
przy pomocy kart CRC
Rysunek 3.3 pokazuje model domenowy wykonany w rozdziale 2. Model domenowy
umoliwia nam analiz obiektw biznesowych lub domenowych. Historie uytkownika
umoliwi nam analiz klas kontrolerw internetowego interfejsu uytkownika. Tak wic
przyjrzyjmy si obiektom, ktre chcemy wykorzysta do implementacji historii Lista
arkuszy, abymy mogli si dokadnie przyjrze, jak dziaaj karty CRC.

Cz II Tworzymy przykadow aplikacj

72

Rysunek 3.3. Model domenowy dla Time Expression

Rysunek 3.4 pokazuje prototyp UI Lista kart pracy z rozdziau 2. Jak wspomniaem
wczeniej, wiemy, e interfejs uytkownika bdzie si opiera na przegldarce WWW
i e bdziemy korzysta z wzorca MVC. Tak wic przyjrzyjmy si naszym klasom
z punktu widzenia wzorca projektowego MVC.
Rysunek 3.4.
Ekran
Lista kart pracy"

W modelu znamy ju nazwy niektrych obiektw Time Expression znajduj si


one w naszym modelu domenowym. Znamy rwnie nazw historii uytkownika dla
kontrolera (w tym przypadku Lista kart pracy) z rozdziau 2. Wiedzc to wszystko,
moemy zaj si naszymi pierwszymi klasami, korzystajc z kart CRC.
W tym przypadku karty CRC okrelaj nazw klasy, odpowiedzialno i klasy wsppracujce. Tabela 3.1 pokazuje budow przykadowej karty CRC wraz z wyjanieniami
dotyczcymi trzech komponentw, ktre tam wida. Zauwa, e chocia skorzystaem
tutaj z wersji elektronicznej, to karty moesz wykona z papieru o wymiarach 712
cm i pniej przetworzy je na form elektronicznej (jeli okae si to konieczne).
Tabela 3.1. Budowa prostej karty CRC
Nazwa klasy (rzeczownik)
Odpowiedzialno (obowizki tej klasy, metody
biznesowe, obsuga wyjtkw, metody zwizane
z bezpieczestwem, atrybuty, zmienne)

Wsppracownicy (inne klasy wymagane


do dostarczenia kompletnego rozwizania)

Rozdzia 3. Metodologie XP i AMDD

73

Karty CRC dostarczaj nieformalnej techniki do zorientowanej obiektowo analizy


interakcji zachodzcych pomidzy klasami. Lubi karty CRC, poniewa mog by
uyte w nieformalnej sesji z deweloperami lub uytkownikami do analizy obiektw bez
potrzeby uycia komputera. Ponadto karty CRC mog by stosowane w celu utworzenia
formalnego diagramu klas, jeli bdzie to konieczne (zrobimy do w dalszej czci tego
rozdziau).
Tabele od 3.2 do 3.4 pokazuj przykadowe karty CRC dla klas, ktre stworzymy pniej
w tym rozdziale; zostay przedstawione tutaj, abymy mogli zapozna si z wymaganiami
dla ekranu Lista kart pracy.
Tabela 3.2. Przykadowa karta CRC dla klasy Timesheet
Timesheet
Zna dat koca okresu
Zna czas
Zna kod dziau
Tabela 3.3. Przykadowa karta CRC dla klasy TimesheetManager
TimesheetManager
Pobiera kart(y) pracy z bazy danych
Zapisuje kart pracy w bazie danych
Tabela 3.4. Przykadowa karta CRC dla klasy TimesheetListController
TimesheetListController
Kontroler (ze wzoru MVC) sucy do wywietlania listy kart pracy

Omwilimy podstawowe pojcia zwizane z kartami CRC. Moemy teraz pj krok


dalej.

Mapa przepywu aplikacji


(artefakt domowej roboty)
W starszych projektach korzystaem z tabeli podobnej do tabeli 3.5. Jej format opracowaem sam, nie jest on zdefiniowany. Nazwaem j map przepywu aplikacji, poniewa pokazuje mi, w jaki sposb bdzie dziaa interfejs uytkownika od pocztku do
koca (jakimi ciekami moe porusza si uytkownik). Ta technika rwnie dobrze
odwzorowuje historie uytkownika na widoki (litera V we wzorcu MVC), ktre
z kolei odwzorowuje na kontroler i ostatecznie na obiekty modelu.

Cz II Tworzymy przykadow aplikacj

74
Tabela 3.5. Przykadowa mapa przepywu aplikacji
Nazwa
historii

Widok

Klasa kontrolera

Wsppracownicy

Zalene
tabele

Lista kart
pracy

timesheetlist

TimeSheetListController

TimesheetManager

Timesheet

Wprowad
godziny

enterhours

EnterHoursController

TimesheetManager

Timesheet
Department

Technika uzupeniajca
Porwnujc t map przepywu aplikacji do diagramw klas lub kart CRC, zauwaysz,
e uzupenia ona karty CRC i diagramy klas. Lista kart CRC, ktra zawiera midzy
innymi zakres odpowiedzialnoci klas, uzupenia braki mapy przepywu aplikacji. Z drugiej strony diagramy klas pokazuj zwizki, zachowania (metody), atrybuty i prawdopodobnie jeszcze wicej ni zawiera taka mapa.
Przy poczeniu wszystkiego razem w postaci tabeli, moemy atwo znale nazwy klas
(nawet przy duych projektach) i atwo je sortowa przy pomocy arkusza kalkulacyjnego
lub innych narzdzi.

Rozszerzamy map przepywu aplikacji


o kolumny CRUD
Ta tabela moe by rwnie uyta do historii niezawierajcych interfejsu uytkownika,
takich jak Przypomnienie e-mailowe: Pracownik. Na przykad kolumny odpowiedzialne
za widok i kontroler mog by zastpione kolumn nazwan Zadanie.
Ponadto moesz rozszerza t tabel, dzielc kolumn Zalene tabele na cztery kolumny
CRUD (od ang. create tworzenie, read czytanie, update aktualizacja, delete
usuwanie). To pozwoli pokaza nie tylko tabele, do ktrych si odwoujemy, ale rwnie
to, w jaki sposb wpywaj na nie poszczeglne klasy. Dodajc kolumny CRUD, zasadniczo dostarczasz penej mapy przepywu (od widoku do bazy danych i z powrotem)
w jednym wierszu naszej tabeli.

UML diagram klas


W dalszej czci zajmiemy si podstawowym diagramem klas. Moim zdaniem jest to
opcjonalny krok (patrz ramka poniej), poniewa nasze karty CRC i mapa przepywu
aplikacji dostarcz dostatecznej iloci informacji do implementacji klas. Jednake diagramy klas mog by dobr rzecz, kiedy uyjemy ich w odpowiedni sposb.
Rysunek 3.5 pokazuje przykadowy i minimalny diagram klas dla klas zdefiniowanych
do tej pory.

Rozdzia 3. Metodologie XP i AMDD

75

Rysunek 3.5.
Przykadowy
diagram klas
dla Time Expression

Osobista opinia: Diagramy UML


Przez wiele lat uywaem rnych rodzajw diagramw UML, wczajc w to klasyczne diagramy
UML, diagramy pakietw (moje ulubione) i rzadko uywane diagramy wdroenia.
Jest rwnie rodzaj diagramw, ktrych nie jestem wielkim fanem: diagramy sekwencji. Nie
lubi ich, poniewa zauwayem, e szybko staj si zbyt zoone i nieporczne. Jednake bd
pierwszym, ktry Ci powie, e nie znam innego, lepszego sposobu ni te diagramy (w kadym
razie jeszcze nie, ale pracuj obecnie nad lepszymi sposobami modelowania (tworzenia) diagramw. Sprawd stron visualpatterns.com, jeli interesuje Ci ten temat).
Tymczasem staram si uywa diagramw UML wtedy, kiedy wydaj si odpowiednie, poniewa myl, e s cenne, gdy s uyte w odpowiednim miejscu i w odpowiednim czasie.
W rzeczywistoci sdz, e diagramy UML s najbardziej uyteczne, kiedy s generowane
do dokumentacji na postawie istniejcego ju systemu (na przykad podczas przekazywania
systemu).
Mam nadziej, e nie przedstawiem UML w cakowicie zym wietle, bo nie to byo moim
celem, zwaszcza e przez wiele lat wielu inteligentnych ludzi pracowao nad tym, aby powsta
standard UML. (W rzeczywistoci opieram cae moje badania na pracy wykonanej wczeniej,
zamiast wymyla od nowa koo).
Moim gwnym zarzutem wobec diagramw UML jest to, e staj si szybko zbyt skomplikowane, szczeglnie w przypadku duych projektw. Innym problemem zwizanym z UML
jest fakt, e wymaga specjalnych narzdzi, ktre s zwykle komercyjne i podnosz koszty
firmy. Dodatkowo niektre z tych narzdzi maj strom krzyw uczenia i w zwizku z tym
wymagaj specjalnego szkolenia pracownikw (najlepszym przykadem jest Rational Rose),
w wyniku czego znowu podnosz si koszty utrzymania projektu.

76

Cz II Tworzymy przykadow aplikacj

Ponadto proste narzdzia, takie jak OpenOffice.org, Microsoft PowerPoint, Microsoft Visio,
umoliwiaj czenie rnych figur (na przykad prostoktw) za pomoc cznikw, ktre s
zachowywane nawet w przypadku zmiany pooenia ktrego obiektu. S to potne narzdzia,
poniewa pozwalaj w prosty sposb tworzy diagramy przepywu. Czsto korzystam z cznikw, jak wida na diagramach umieszczanych w tej ksice; w rzeczywistoci prawie wszystkie
diagramy zrobiem, korzystajc z OpenOffice.org!
Ponadto czsto stosuj praktyki rekomendowane przez metodologi Agile, na przykad modelowanie w celu osignicia okrelonego efektu lub tworzenie wystarczajco dobrych artefaktw.
Idc dalej, uaktualniam je tylko wtedy, gdy jest to niezbdne, poniewa wiele artefaktw mona
wyrzuci, gdy speni swoje zadanie. Po zaimplementowaniu zaprojektowanego kodu posiadasz ju gotow dokumentacj tak, sam kod. (Jak wspominaem wczeniej, na podstawie
kodu jestemy w stanie stworzy nieze diagramy klas i inne).
Gwnym powodem tego, e cika dokumentacja wydaje si czystym obdem, jest to, i nie
jestem w stanie sobie przypomnie projektu, ktry utrzyma do samego koca kompletn dokumentacj. Dzieje si tak, poniewa w szybko zmieniajcym si wiecie, w ktrym zdarzaj si
nierealistyczne terminy ukoczenia projektw, bardzo trudno jest utrzyma aktualn dokumentacj.
Podsumowujc, uywaj diagramw UML tam, gdzie s odpowiednie, ale nie wstyd si i nie
wahaj uy prostszych, lecz efektywniejszych wasnych diagramw. Na koniec chciaem zacytowa jedno z hase reklamowych ze strony agilemodeling.com: Twoim celem jest budowanie
oglnego zrozumienia, a nie tworzenie szczegowej dokumentacji.

Diagramy pakietw UML


W przypadku naszej przykadowej aplikacji, Time Expression, korzystamy z prefiksu
com.visualpatterns.timex dla nazw pakietw.
Jeli pracowae ju z Jav, to prawdopodobnie wiesz, e pierwszy czon nazwy pakietu to
zazwyczaj nazwa domeny pisana od koca. Na przykad nazwa pakietu com.visualpatterns pochodzi od nazwy domeny visualpatterns.com. Cz timex w nazwie pakietw pochodzi od skrconej nazwy naszej przykadowej aplikacji. Reszta przyrostkw
nazw jest widoczna na rysunku 3.6 przedstawiajcym diagram pakietw UML.

Rysunek 3.6. Diagram pakietw UML dla Time Expression

Rozdzia 3. Metodologie XP i AMDD

77

Wybraem bardzo proste nazwy dla pakietw Javy, aby pasoway do wzorca bazujcego na MVC. Moglimy nazwa pakiet zawierajcy model na przykad czym w stylu
domeny, ale preferuj prostot i jednoznaczno; staram si dopasowa nazwy
pakietw do nazw przyjtych w architekturze lub mapie przepywu aplikacji. W ten
sposb kady nowy czowiek, ktry zajmie si moim kodem, od razu zrozumie jego
organizacj. Tak wic w peni kwalifikowana nazwa naszego pakietu zawierajcego
model bdzie miaa posta com.visualpatterns.timex.model.

Jak moesz si domyla, pakiet kontrolera posiada w sobie klasy zwizane z kontrolerem. Pakiet job zawiera nasze zadania zaplanowane, odpowiedzialne za wysanie przypomnienia. Pakiet util zawiera klasy z kodem pomocniczym.
Ostatnim, ale nie mniej wanym pakietem, jest test, ktry bdzie zawiera kod testw
jednostkowych. Chocia ja wolaem umieci testy w osobnym pakiecie, to wielu deweloperw decyduje si umieszcza kod testowy w tych samych katalogach co testowana
klasa. Jest to kwestia gustu, ale moim zdaniem oddzielenie pakietu (katalogu) z klasami
testowymi pozwala utrzyma jasn i przejrzyst struktur pozostaych pakietw.

Struktura katalogw
Rysunek 3.7 pokazuje struktur katalogw, jakiej uyjemy w naszej przykadowej aplikacji. Powinno to wyglda dosy prosto i znajomo; najwaniejsze podkatalogi to src,
build, lib i dist. Bd si odwoywa do tego rysunku w dalszych rozdziaach (na przykad w rozdziaach 4., 5. i 7.), a podane w tym rozdziale katalogi bd szerzej omwione,
kiedy przyjdzie taka potrzeba. Tymczasem rysunek 3.7 dostarcza krtkiego opisu kluczowych katalogw.

Przykadowe nazwy plikw


Majc struktur katalogw widoczn na rysunku 3.7, moemy teraz przej do utworzenia kilku przykadowych nazw plikw dla klas omawianych wczeniej w tym rozdziale. Na przykad, implementujc ekran Lista kart pracy, omawiany wczeniej w tym
rozdziale, utworzymy nastpujce pliki w katalogu timex/src/java/com/visualpatterns/
timex:
t controller/TimesheetListController.java
t model/Timesheet.java
t model/TimesheetManager.java
t test/TimesheetListControllerTest.java
t test/TimesheetManagerTest.java
t view/timesheetlist.jsp

Cz II Tworzymy przykadow aplikacj

78

Rysunek 3.7.
Struktura katalogw
dla Time Expression

Wytwarzanie oprogramowania
od pocztku do koca
Podsumowujc wszystko, czego si do tej pory nauczylimy w tym rozdziale, moemy
zapisa kolejne kroki wymagane do zaimplementowania (utworzenia) naszej pierwszej
historii, od interfejsu uytkownika do bazy danych. Poniej zamieszczam zadania wymagane do ukoczenia pierwszej historii uytkownika:
t Skonfiguruj rodowisko pracy, wczajc w to JDK, Ant i JUnit (w rozdziale 4.).
t Napisz testy i implementacj klas znajdujcych si w pakiecie model

(korzystajc z Hibernate w rozdziale 5.).


t Napisz testy i implementacj klas znajdujcych si w pakiecie controller

(korzystajc z frameworka Spring w rozdziale 7.).

Testy akceptacyjne
Testy akceptacyjne mog dostarczy nam wielu szczegowych wymaga, tak jak to
dzieje si w wielu projektach opartych na metodologii Agile. Jednym z przykadw
jest lista prawidowych operacji, jakie moe wykona uytkownik na danym ekranie.

Rozdzia 3. Metodologie XP i AMDD

79

Pomys, aby korzysta z testw akceptacyjnych jako specyfikacji wymaga, jest sensowny,
poniewa te testy okrelaj to, czego oczekuje klient od naszej aplikacji. W naszym przypadku uyjemy ich tylko do testw jednostkowych, aby ustali szczegowe wymagania.
Jednake jest wiele wicej zastosowa testw akceptacyjnych w prawdziwym wiecie.
Poniszy podrozdzia jest list naszych testw akceptacyjnych i elementw historii, ktre
bdziemy implementowa.

Logowanie
t Identyfikator pracownika moe mie dugo do 6 znakw. Haso musi si

zawiera w 8 10 znakach.
t Tylko uytkownicy o prawidowych identyfikatorach mog si logowa.

Lista kart pracy


t Uytkownik ma dostp tylko do swoich kart pracy.

Wprowad godziny
t Godziny musz by wprowadzane w formacie numerycznym.
t Dzienna liczba godzin nie moe przekracza 16. Tygodniowa liczba godzin

nie moe przekracza 96.


t Zapata za godziny wpywa do okrelonego dziau.
t Godziny mog by wprowadzone w postaci dziesitnej, z dwoma cyframi

po przecinku.
t Pracownik moe oglda i edytowa tylko wasne karty pracy.

Inne rozwaania
Jak wspomniaem wczeniej, potrzebujemy opracowa minimalny projekt i architektur,
aby mona byo zacz. Chocia stworzylimy rozsdnej wielkoci architektur i projekt,
w tym rozdziale zostao wiele nieomwionych elementw:
t Bezpieczestwo aplikacji omwi ten problem w rozdziale 7., Framework

Spring Web MVC, i 10., Elementy zaawansowane.


t Zarzdzanie transakcjami omwi ten element w rozdziale 5. Zobaczysz,

jak zaimplementowa programowe zarzdzanie transakcjami z uyciem


Hibernate.

Cz II Tworzymy przykadow aplikacj

80

t Obsuga wyjtkw w rozdziale 10. przyjrzymy si sprawdzalnym

i niesprawdzalnym wyjtkom; przyjrzymy si te, kiedy warto uywa jednych,


a kiedy drugich.
t Inne elementy funkcje wymagane przez Time Expression, na przykad zadania

odpowiedzialne za wysyanie e-maili, omawiane w rozdziale 10. W dalszych


rozdziaach bd omawiane rwnie inne tematy, wczajc w to zapis logw,
biblioteki znacznikw i inne.
Duy pocztkowy projekt czy refaktoryzacja?
Odnoszc si do sw Martina Fowlera (refactoring.com), refaktoryzacja to technika suca
do restrukturyzacji kodu, zmieniajca jego wewntrzn struktur bez zmiany zewntrznego
interfejsu. Wielu deweloperw od lat korzysta z refaktoryzacji kodu, ale dopiero Martin Fowler
nada tej technice formaln nazw (i ciesz si, e to zrobi).
Kiedy zaczniesz pisa kod aplikacji, prawdopodobnie znajdziesz kilka lepszych sposobw na
zrealizowanie niektrych funkcji. Na przykad moesz usun nadmiarowy kod lub przenie
powtarzajcy si kod do klasy nadrzdnej. W zwizku z tym gboko wierz, e refaktoryzacja
powinna zosta otwart opcj nie tylko w przypadku kodu, ale rwnie w przypadku bazy danych,
architektury, dokumentacji, skryptw do integracji (budowania) i innych. Uwalnia nas to
rwnie od tworzenia idealnego projektu i architektury na samym pocztku pracy.
Ostatnio przeczytaem esej na stronie agiledata.org, ktry podsumowuje ten temat. Warty
uwagi jest fragment: Deweloperzy Agile przechodz w t i z powrotem pomidzy zadaniami
takimi jak modelowanie danych, modelowanie obiektw, refaktoryzacja, odwzorowania, implementacja i poprawa wydajnoci.
Wemy na przykad t ksik. W zasadzie dla mnie to jest projekt, poniewa piszc ksik,
tworz przykadowy projekt. Cz projektu opracowaem na pocztku, ale nie miaem odpowiedzi na wszystkie pytania, kiedy rozpoczynaem pisanie; nie martwio mnie to jednak, poniewa mogem refaktoryzowa architektur, projekt, kod lub sam proces uyty do tworzenia
Time Expression w dalszych rozdziaach, a chciaem ruszy do przodu, zamiast sta w miejscu,
prbujc przewidzie kady moliwy scenariusz.
W skrcie zdecydowanie powiniene opracowa niewielki pocztkowy projekt i architektur,
ale pamitaj e moesz w kadym momencie zmieni lub ulepszy pocztkowe zaoenia,
moesz uproci kod i o ile nie jest za pno (na przykad nie jest to dzie testw akceptacyjnych lub wdroenia), to moesz refaktoryzowa.

Podsumowanie
W tym rozdziale zrealizowalimy zaoenia architektury i projektu przyjte dla naszej
przykadowej aplikacji Time Expression:
t Opracowalimy diagram architektury.
t Zbadalimy obiekty, korzystajc z kart CRC.
t Wykonalimy map witryny (map przepywu aplikacji).
t Opracowalimy diagramy klas i pakietw dla Time Expression.

Rozdzia 3. Metodologie XP i AMDD

81

t Zaoylimy struktur katalogw do przechowywania naszych plikw (ktre

utworzymy w kolejnych rozdziaach).


t Przyjrzelimy si kolejnym etapom tworzenia naszych ekranw w nastpnych

rozdziaach.
t Przejrzelimy list zaawansowanych poj, ktre bdziemy musieli rozway,

tworzc nasz przykadow aplikacj: obsuga wyjtkw, zadania zaplanowane,


zarzdzanie transakcjami, zapis logw i inne.
Na pocztku rozdziau obiecaem, e przedstawi diagram pokazujcy proces tworzenia
niektrych artefaktw. (Czyby oszukiwa i wczeniej zerkne na niego?). Rysunek
3.8 pokazuje ten diagram. Oczywicie, dodatkowo jasno pokazuje artefakty XP na rnych poziomach konceptualnym, fizycznym i nawet implementacyjnym. Zauwa,
e linie na rysunku 3.8 s jednokierunkowe; pokazuj, w jaki sposb tworzylimy artefakty w tym i poprzednim rozdziale. Jednake w prawdziwym wiecie te linie mog
przebiega w dwie strony, poniewa wystpuj sprzenia zwrotne.

Rysunek 3.8. Koncepcja, model fizyczny i implementacja artefaktw dla Time Expression

Cz II Tworzymy przykadow aplikacj

82

Ostatnia myl zwizana z tematem artefaktw i dokumentacji. Zapamitaj, e baza


danych i kod to najwaniejsze artefakty ze wszystkich. Nie jestem w stanie tego podkreli w sposb wystarczajcy. Pozostaych artefaktw opisanych w tej ksice moesz
uy lub nie (nie s niezbdne). Ponadto wiele z tych opcjonalnych artefaktw moe by
potencjalnie odrzuconych, poniewa po tym, jak zostay wykorzystane, wielu ludzi ich
nie aktualizuje. Jednake kod jest zawsze aktualny, poniewa jest tym, czym aplikacja dla
klienta; baza danych przetrwa kady program napisany do jej obsugi, a wic powinna
by uwaana za najwaniejszy skadnik systemu.
Skoro mwimy teraz o bazie danych i kodzie nadszed czas, aby zakasa rkawy
i zacz przygotowywa nasze rodowisko pracy, korzystajc z narzdzi Ant i JUnit
w kolejnych rozdziaach, abymy mogli zacz pisa waciwy kod.

Rekomendowane rda
Ponisze strony dostarczaj dodatkowych informacji na tematy omwione w tym rozdziale:
t Agile Model Driven Development: http://www.agilemodeling.com
t Agile Data: http://www.agiledata.org
t Programowanie ekstremalne: http://extremeprogramming.org
t Karty CRC: http://c2.com/doc/oopsla89/paper.html

You might also like