Refaktoryzacja – wydzielenie metody szablonowej

Jedna z najprostszych refaktoryzacji wprowadzających wzorzec projektowy do kodu. Wzorcem tym jest metoda szablonowa (template method), a refaktoryzacją wydzielenie metody (extract method). Czyli coś dla n00b-ów 😉 Od czego zaczynamy Poniżej przykładowy kod, który w tym przypadku sprawdza czy dane wyrażenie przyjmie obiekt danego typu Listing 1. Sytuacja wyjściowa public final class SearchHelper { private […]

S.O.L.I.D.ne programowanie – część 5, czyli z plebsem nie gadam

S.O.L.I.D.ne programowanie – część 0, czyli wstęp S.O.L.I.D.ne programowanie – część 1, czyli monogamia S.O.L.I.D.ne programowanie – część 2, czyli spoufalamy się S.O.L.I.D.ne programowanie – część 3, czyli podkładamy świnię S.O.L.I.D.ne programowanie – część 4, czyli apartheid Pomysł na codzienne pisanie na blogu ma pewne zalety. Na przykład można dokończyć coś co pisałem… 7 lat […]

Maszyna stanowa – zagada projektowa

Ciekawa, moim zdaniem, łamigłówka i zagadka projektowa. Niby każdy wie, ale nigdzie nie znalazłem ładnego wytłumaczenia. Mamy sobie prostą maszynę stanową w postaci enuma wzbogaconego o metodę sprawdzającą dopuszczalność przejścia: listing 1. enum State, czyli maszyna stanowa public enum State { A, B, C, D; private List<State> validChanage; static { A.validChanage = Arrays.asList(B); B.validChanage = […]

Najbardziej pojebane wzorce projektowe

Noblesse oblige… III Singleton Co w nim pojebanego? Jest to jednocześnie wzorzec i antywzorzec. Szczerze nienawidzony przez wszystkich, a jednocześnie w wielu frameworkach z lubością używany (nie w prost, ale zawsze). Do tego jego prawidłowa implementacja w znacznej mierze opiera się o dobrą wolę programisty i zaufanie do użytkownika, że nie będzie grzebał w klasie […]

Zagadka projektowa 2

Kolejna zagadka najpierw jednak rozwiązanie poprzedniej zagadki. Który listener lepszy Oba są dobrym rozwiązaniem. Wybór powinien nastąpić w wyniku analizy polegającej na odpowiedzi na pytanie: Kto powinien decydować o tym, że dane zdarzenie zakończyło się sukcesem albo porażką? Jeżeli decyzję powinien podjąć klient to lepszym jest listener z listingu 1. Jeżeli to my decydujemy to […]

Zagadka projektowa

Dziś będzie „lajcik”. Mam dla was zagadkę projektową. Załóżmy, że mamy zaprojektować klasę służącą do komunikacji z pewną usługą. Przy czym usługa ta odpowiada na zadane pytania w taki sposób, że odpowiedź może interesować wiele obiektów w ramach aplikacji. Przykładem może być tu proste wciśnięcie przycisku do którego możemy przypisać wiele listenerów. Generalnie zatem mówiąc […]

Enumy dla średnio-zaawansowanych

Warszawski JUG ma przerwę wakacyjną, ale gorące trwają. Skrzynki mailowe zapełniają się, a serwery poczty zapychają. W ostatnim czasie pojawiło się kilka (pierwsza, druga, trzecia) dyskusji, w których przewinął się temat użycia enumów w różnych kontekstach. W tym wpisie postaram się ogarnąć część tematu. Przypomnienie podstaw Zakładam, że każdy wie co to jest enum. Jak […]

Wprowadzenie do wzorca MVP z Vaadin w tle – cz. 2 praktyka

W tej części zastosujemy MVP w praktyce. Na początek dla uproszczenia przebudujemy aplet z poprzedniej części, ale nie do MVP, a do czegoś co można nazwać dobrym kodem. „Małe MVP” Nie będę tu pokazywał MVP, ale będzie to coś co też oddaje sens tego wzorca. Standardowe komponenty Swing rozszerzę o implementację prostych interfejsów służących do […]

Wprowadzenie do wzorca MVP z Vaadin w tle – cz. 1 teoria

Wzorzec projektowy Model-View-Presenter (MVP) nie jest szeroko znany w społeczności Javowej. Inaczej… nie był szerzej znany do czasu aż Google nie postanowił go promować jako jednego z elementów GWT. Nie jest to nic nadzwyczajnego ponieważ duża część biznesowych aplikacji pisanych w Javie posiada interfejs webowy. Ten rodzaj GUI znacznie lepiej jest obsługiwany za pomocą wzorca […]

Vaadin jako klient webservice III: wywołanie metody testowej

Część I: Przygotowanie projektu Część II: Podstawowy UI Czas na wielkie łał, czyli wywołanie usługi… w końcu. Adapter interfejsu Ideone I szerzej dowolnej usługi kompilatora. Po co? Oczywiście po to by w razie czego uniezależnić się od dostawcy. Proste. Listing 1. CompilerApi package pl.koziolekweb.vaadin.codecompiler.api; import java.text.ParseException; import pl.koziolekweb.vaadin.codecompiler.data.TestResponse; public interface CompilerApi { TestResponse testFunction() throws […]