Optymalizacja kodu aplikacji 26.10.2011
Często jest tak, że wydajność nie jest naszym absolutnym priorytetem, ale nie raz staje się ważna gdy faktycznie pod tym względem popełniliśmy zbyt wiele zaniedbań. Równie często zdarza się sytuacja, w której jednym z kluczowych wymagań niefunkcjonalnych jest właśnie odpowiednia wydajność. Optymalizacje można dokonywać po stronie serwerów (architektura, konfiguracja serwera, bazy danych itp.) oraz po stronie samej aplikacji (keszowanie dodatkowych elementów, trzymanie cache w pamięci operacyjnej, refaktoryzacja i optymalizacja kodu). W tym krótkim wpisie skoncentruję się na optymalizacji na poziomie kodu aplikacji.
czytaj całość,
komentarzy: 6
Mock Objects - testy zachowania 21.11.2010
Testy jednostkowe, jak sama nazwa wskazuje, polegają na testowaniu jednostki - jednego obiektu w ramach jednego zestawu testów. Co jednak w sytuacji, gdy testowany obiekt jest zależny od innego obiektu? Przy bezpośrednim wykorzystaniu tego dodatkowego obiektu w testach jednostkowych jest łamana podstawowa ich zasada. Przy wykorzystaniu rzeczywistego obiektu pomocniczego, robimy ślepe założenie, że działa on prawidłowo i nie zakłóci on wyników testów. Innymi słowy testy mogą się nie powieść, ale nie oznacza to jednoznacznie, że to w testowanej klasie jest błąd. Sytuacja może się również paradoksalnie odwrócić, testy zostaną przeprowadzone prawidłowo, mimo iż testowana klasa zawiera błędy, które powinny zostać wykryte.
czytaj całość
Wzorce w praktyce: Service Stub 03.10.2010
Jakiś czas temu pracowałem nad projektem, którego funkcjonalności były oparte na wykorzystywaniu usług sieciowych o podobnej funkcjonalności. Pierwszym krokiem było ujednolicenie interfejsów tych usług. Na podstawie jednej z usług tworzyłem prosty interfejs, który później zaimplementowałem również dla pozostałych. Pierwszym krokiem było zastosowanie wzorca Facade, aby uprościć na potrzeby aplikacji interfejs pierwszej usługi sieciowej. Następnie pozostałe usługi sieciowe również zaadaptowałem do tego nowego interfejsu, wykorzystując wzorzec Adapter. Adapter od Facade różni się tym, że adapter przystosowuje zewnętrzny obiekt (zbiór obiektów) o podobnym interfejsie do już istniejącego, a fasada obudowuje złożony interfejs nowym, prostszym w użyciu. Ten wpis nie jest jednak o Adapterze (pisałem już o nim tutaj), ani o Facade, a o Service Stub.
czytaj całość
Wzorce w praktyce: krótko o MVC 31.03.2010
Dla odmiany przykład zastosowania tytułowego wzorca projektowego omówię na przykładzie innego języka niż PHP. Przedstawię koncepcję warstwy kontrolerów (bynajmniej nie całego MVC) niezależnych od widoku na podstawie aplikacji desktopowej w Javie.
Podstawowe pojęcia wzorca MVC w gwoli przypomnienia:
Model - dane na których operuje program. Prezentuje go widok, a kontroler wykonuje na nim operacje (zmiana danych). Model powiadamia widok o dokonanych w nim zmianach, które dokonał kontroler.
Widok - jest to warstwa prezentacji, zazwyczaj interfejs konsolowy/graficzny użytkownika, prezentuje model oraz ewentualnie pod niektóre elementy widoku może być podpięty kontroler (np. przycisk który uruchamia słuchacza, który z kolei uruchamia kontroler).
Kontroler - wykonuje operacje na modelu, aktualizuje go, przekazuje do widoku model.
czytaj całość,
komentarzy: 2
Wzorce w praktyce: Koordynator 29.01.2010
Dziś pora na trzeci artykuł z serii "wzorce w praktyce". Tym razem postanowiłem omówić praktyczne zastosowanie mniej znanego i stosowanego (w programowaniu w php) wzorca.
Każdy z Was zapewne wie co to jest transakcja bazodanowa. Jeśli jednak nie, to przypomnę, że transakcja w systemach baz danych polega na tym, że określony zbiór zapytań wykona się poprawnie w całości lub wogóle żadne zapytanie nie zostanie wykonane (de facto "nie wykona się" jest błędnym określeniem, raczej "nie zostanie zatwierdzone"). Więcej na ten temat znajdziecie na wikipedii. Transakcja jest implementacją wzorca projektowego koordynator, a raczej rozbudowanej specjalizacji tego wzorca o nazwie "Zatwierdzanie trój-fazowe" (Three-Phase Commit).
czytaj całość,
komentarzy: 2
Wzorce w praktyce: Prototype 30.12.2009
Przed wami drugi wpis z cyklu "Wzorce projektowe w praktyce", tym razem omawiać będe Prototype.
Prototyp to wzorzec, który zakłada tworzenie nowych obiektów klonując jeden obiekt macierzysty. Na pierwszy rzut oka wydaje się to dziwnym rozwiązaniem, ale są sytuacje kiedy się sprawdza. Zastosowanie, w którym prototyp się sprawdza, to sytuacja w której mamy utworzyć wiele bardzo podobnych obiektów tego samego typu o podobnym stanie (wartości składowych). Przykładowo jeśli mamy napisać grę wideo, w której renderowane są obiekty trawy, to w celach wydajnościowych należy utworzyć jeden obiekt źdźbła (lub prościej: obiekt tekstury trawy ;)), a następnie go wielokrotnie klonować i zmieniać jedynie pozycję, czy też inne parametry.
czytaj całość,
komentarzy: 2
Wzorce w praktyce: Adapter 28.12.2009
Mój pierwszy wpis, a zarazem pierwszy wpis (mam nadzieję) z serii "Wzorce w praktyce". W tym artykule przybliżę praktyczne zastosowanie wzorca projektowego adapter na przykładzie wykorzystania klas walidacji z Zend Framework w symfony. Być może nie jest to w 100% trafiony przykład praktycznego zastosowania wzorca, gdyż symfony ma odpowiedniki walidatorów z ZF, pozatym w sf walidatory pełnią jeszcze funkcję filtrów.
czytaj całość