Ze względu na to, że za parę dni mija drugi rok mojej pracy zawodowej postanowiłem się pokusić o małe podsumowanie tego co przez ten czas się działo na blogu.
Obecnie najstarsza nota pochodzi z [Marca 2005](http://blog.dywicki.pl/?m=200503), chociaż nie jest to ogólnie pierwsza nota jaką napisałem. Pierwszy "deblog" jak i backupy przepadły podczas jednego z padów serwera. Jak widać perypetie z utratą danych powtarzają się co jakiś czas (ostatni taki problem odnotowaliśmy w minionym listopadzie). Tematem dominującym na blogu do tej pory było PHP (aż [50 wpisów](http://blog.dywicki.pl/?cat=4)!), chociaż w przyszłości będzie pojawiać się stopniowo coraz więcej Javy (do tej pory tylko [12 wpisów](http://blog.dywicki.pl/?cat=12)).
Dzisiaj (w zasadzie wczoraj) w otchłani skrzynki odbiorczej [RSSOwl](http://rssowl.org/) znalazłem [link do propozycji](http://www.eclipse.org/proposals/eclipselink/) wspomnianego projektu.
Od jakiegoś czasu [na stronie Eclipse](http://eclipse.org) możemy spotkać bardzo miły button sygnalizujący nadejście nowego zbiorczego wydania Eclipse i narzędzi zależnych. [Europa](http://www.eclipse.org/europa/) to potomek [Callisto](http://www.eclipse.org/callisto/), z jedną drobną różnicą.. Europa obejmuje 21 projektów podczas gdy Callisto obejmowało ich 10.
Jakiś czas temu [Michał Mech](http://michalmech.pl) [pisał](http://michalmech.pl/index.php/2007/05/23/manager-layoutu-grouplayout-w-java/) o tym jak można rozkładać komponenty w [Swingu](http://java.sun.com/docs/books/tutorial/uiswing/index.html) przy pomocy [Group Layoutu](http://java.sun.com/javase/6/docs/api/javax/swing/GroupLayout.html). Dzisiejszego dnia mam zamiar pokazać Wam drugą stronę medalu - mianowicie [Form Layout](http://help.eclipse.org/help31/nftopic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/layout/FormLayout.html), który można wykorzystać przy tworzeniu aplikacji w [SWT](http://eclipse.org/swt/).
Chciałbym dzisiaj poruszyć dość ważną kwestię, jaką bez wątpienia jest rutyna i frajda z pracy. Motorem dla mnie była głównie rozmowa, którą odbyłem dzisiaj z kolegami, gdy siedząc przy piwie dyskutowaliśmy na temat alternatyw i sposobów wzbudzania w sobie entuzjazmu.
Może na początku kilka definicji zaciągniętych ze [słownik języka polskiego](http://sjp.pwn.pl) wydawnictwa PWN.
## Praktyka
W tym miejscu bazuję na swoim bądź co bądź skromnym doświadczeniu, które nabyłem pracując w [AGI](http://autoguard.pl). Była to pierwsza firma, w której spotkałem się z wykorzystaniem testów jednostkowych. Pamiętam do dzisiaj walki o 70% pokrycie kodu testami. :).
Nie mniej, nie robiliśmy tego tylko po to by zobaczyć zielone słupki w raporcie wygenerowanym przez [PHP Unit](http://phpunit.de). Takie pokrycie kodu testami gwarantuje znaczne ograniczenie błędów wychodzących z czasem, głównie dlatego, że znajduje się już podczas pisania testów.
Jakiś czas temu postanowiłem zmienić myśl przewodnią bloga. Zapewne nikt nie zauważył tego, że zniknął tekst "żubr powstaje z jęczmienia" na rzecz "Pragmatyzmu kontrolowanego". Czym było to podyktowane? Ano tym by tą gromadę różnych not, nie zawsze łączących się ze sobą tematycznie, podeprzeć myślą, jaką jest poszerzanie horyzontów i dzielenie się zdobytymi z biegiem czasu doświadczeniami.
Od jakiegoś czasu na [forum.php.pl](http://forum.php.pl/) spotykam się z różnymi zdaniami na temat interfejsów i klas abstrakcyjnych. Argumenty, które czasami się trafiają są chybione.
Zacznijmy od tego, że trzeba potrafić rozróżnić interfejs od klasy abstrakcyjnej, **to nie to samo**!
Interfejs jest najwyższym poziomem abstrakcji, który definiuje nowy, wolny od implementacji typ. Bez jakiejkolwiek linii kodu, tylko sygnatury metod publicznych.
Klasa abstrakcyjna jest już początkiem konkretnej implementacji, zawiera kod ogólny i wymusza w klasach dziedziczących dorzucenie konkretnych metod, które są specyficzne, inne, różne. Mogą trafić się takie przypadki, że klasa abstrakcyjna zawiera 5 metod, a jej pochodne tylko jedną. Czy jest to uzasadnione? Oczywiście. Ta jedna metoda determinuje nowy typ, który jest jawną specjalizacją.
### Pierwsze błędy
Pamiętam swoje pierwsze implementacje MVC, w czasach gdy słowo framework nie było jeszcze trendy a wiele osób, w tym i ja, nawet go nie używało. W owych pierwszych implementacjach MVC model był pewnego rodzaju fasadą, która zapewniała dostęp do danych.
Problem polegał na tym, że kod np klasy User wyglądał następująco: