Autor wpisu: stormfly, dodany: 29.11.2008 13:40, tagi: php, framework
Autor wpisu: Splatch, dodany: 03.09.2008 09:28, tagi: framework
W nawiązaniu do poprzedniej noty o CXFie, którą napisałem jakiś czas temu, gonię aby uzupełnić brak konfiguracji klienta. Sam proces jest bardzo zbliżony do tworzenia klienta w oparciu o XFire. Nie jest wymagana duża ilość kodu Javy, a w zasadzie tylko dwa pliki XML (client.xml, myservice.xml).
Pierwszy z nich odpowiada za wczytanie wymaganych rozszerzeń CXFa oraz definicję bazowej konfiguracji fabryki z interceptorami. W interceptorach możemy skonfigurować logowanie, obsługę załączników czy standardów WS-Security etc. Wszystkie te ustawienia będą dziedziczone, a fabryki docelowych usług będą dodawać tylko adres, do odpytywania. Na koniec bean klienta będzie miał określony autowire by nie przekazywać mu wszystkich własności.
Autor wpisu: Splatch, dodany: 02.09.2008 18:51, tagi: framework
Temat testów jednostkowych nie pojawiał się na tym blogu tak często jak PHP czy JAXB, jakkolwiek temat ten poruszałem w 2 notach - o testach oraz o singletonie.
Tych, którzy chcieliby dowiedzieć się więcej o testach na przykładzie JUnit i Javy zapraszam się do zapoznania z bardzo dobrą pozycją na temat testów jednostkowych, z którą miałem przyjemność się zetknąć.
JUnit. Pragmatyczne testy jednostkowe w Javie to tłumaczenie książki Pragmatic Unit Testing in Java z serii The Pragmatic Programmers. Nie wspominam tu o tej książce jak i całej serii przypadkowo, ponieważ pragmatyzm jest główną domeną tego bloga.
Tytuł ten traktuje o rzeczy bardzo ważnej, jaką są bez wątpienia testy jednostkowe. Nie jest to sucha referencja opisująca możliwości JUnit ale przewodnik i poradnik - czyli nie tylko o tym czym testować ale po co i w jaki sposób to robić. Sam język w którymś momencie schodzi na drugi plan a ważna staje się na prawdę idea i szczytny cel, jakim jest wykluczanie błędów przed wdrożeniem aplikacji, tak by nie musiał się o nich w ogóle dowiadywać klient.
W książce znajduje się wiele przykładów i rozważań, pisanych lekkim językiem, całość czyta się lekko i przyjemnie. Jest to bodajże najczęściej wypożyczana pozycja z mojej domowej biblioteczki. W każdej kolejnej pracy (a troszkę ich w międzyczasie było :)) staram się komuś polecić tą pozycję i odzew jest zawsze pozytywny, co dowodzi, że praca autora włożona w tytuł była bardzo przemyślana. Z najważniejszych elementów, które zostają w książce omówione należy wymienić definiowanie warunków brzegowych, wykorzystanie “obiektów imitacji” (ang. mock objects) z użyciem biblioteki Easy Mock oraz projektowanie kodu przyjaznego dla testów. Chyba wszyscy się ze mną zgodzą że są to elementy nieodzowne podczas tworzenia testów.
Na zakończenie przytoczę dwa akapity które najbardziej zapamiętałem z całej pozycji.
Gdyby architekci sprawdzali mosty w taki sam sposób jak większość programistów to na świeżo wybudowanym moście środkiem jezdni przejeżdżałby jeden malutki samochód w ciepły dzień, bez jakiegokolwiek wiatru i innych zakłóceń atmosferycznych. (o warunkach brzegowych)
Z testami jednostkowymi jest jak ze strzyżeniem trawnika. Jeśli jest on dobrze utrzymany to jego uporządkowanie nie jest zadaniem trudnym. Jeśli jednak nasz trawnik zarośnie (w projekcie nie będzie testów jednostkowych) i pojawią się chwasty (błędy) to jego uporządkowanie (wprowadzenie testów) będzie zadaniem bardzo czasochłonnym. (o filozofii testowania)
Koniec końców, siejąc pragmatyczną propagandę na rzecz testów :), zachęcam wszystkich do zapoznania się z opisywaną książką. Dla praktyków zawiera ona kilka trafnych spostrzeżeń a dla laików będzie znakomitym sposobem na wdrożenie się w temat testów.
Szkic tej noty czekał na publikację ponad rok, stąd może być on troszkę nieskładny.
Autor wpisu: Athlan, dodany: 14.06.2008 00:50, tagi: framework, php
Dziś wydana została nowa wersja Vframe oznaczona numerkiem 2.3.1. Większe zmiany:
- Możliwość tworzenia grup routingów za pomocą wyrażeń regularnych (grupowanie regułek, aby przyspieszyć działanie).
- Automatyczne wczytywanie konfiguracji Vframe_Router_Advenced::PatternsBuild().
- Wydzielenie głębi konfiguracyjnej dla kontrolerów (kontroler News_Admin_Vcontroller ma plik: /Configuration/Controllers/Admin/News.php).
- Zaimplementowanie Cache_Engine (wzorzec fabryki) oraz silników: File, Memcache, APC.
- Zaimplementowanie Image_Engine (wzorzec fabryki), silnik GD.
- Zaimplementowanie Db_Layer (wzorzec fabryki), silniki MySQL, SQLite.
- Zniesiona została stała V_APP oraz V_APP_REAL.
- Dodanie nowego komponentu Vframe_Mail_Inbox (pobieranie poczty) oraz silnika Vframe_Mail_Inbox_Engine_Imap.
- Zabezpieczenie unikalnego klucza sesji frameworka, dodanie V_APP_SESSION_HASH.
- Zmiana struktury Exceptions oraz Interfaces - teraz klasy znajdują się w głównym pliku komponentu, nie posiadają wydzielonych plików.
- Dodanie pluginu Vframe_Controller_Front_Plugin_Gzip.
Konieczne zmiany w aplikacji:
- Pliki konfiguracyjne modelu Db_MySQL na Db_Layer_MySQL, analogicznie dla innych baz.
Zalecane zmiany:
- Wszelkie define() zamienić na Vframe::_() (argumenty analogiczne) oraz załadować główny plik konfiguracyjny po frameworku (aby uzyskać funkcję statyczną _() ).
- Usunąć V_APP_REAL.
- Aby użyć pluginu Gzip:
$oFrontController->Plugin(new Vframe_Controller_Front_Plugin_Gzip(6));
gdzie 6 to stopień kompresji, jeżeli null, wówczas domyślnie 6.
Linki:
Autor wpisu: Athlan, dodany: 19.02.2008 21:04, tagi: framework, php
Ostatnio zdenerwowałem się pisząc walidację formularza i nakładanie filtrów na pola formularzy w jednym z panelu administracyjnych. Co chwilę coś nie działało. Framework jest po to, aby unikać takich sytuacji. Aby uniknąć takich sytuacji w przyszłości postanowiłem napisać dość przydatną klasę Vframe_Form integrując ją z Vframe_Validator i Vframe_Input (pluginem POST). Zanim się napisze klasę, wypadałoby napisać mały prototyp.
Tak oto powstała klasa obsługi formularzy oraz jego elementów. Użycie jest bardzo wygodne, po zainicjowaniu $oForm->init() nasz komponent wykonuje filtracje, a następnie walidacje danych wejściowych. Ewentualne błędy można wychwycić poprzez wywołanie metody $oForm->error(’nazwa_pola’); - zwrócony zostanie string w przypadku wystąpienia błędu, null jeżeli go nie ma. Aby sprawdzić, czy wystąpiły jakieś błędy przy walidacji - nie podajemy parametry metody error: $oForm->error(); Zostanie zwrócona liczba błędów (jeden dla każdego pola), jeżeli 0 - możemy wykonać akcję.
Autor wpisu: Splatch, dodany: 18.06.2007 23:41, tagi: framework, php
Dzisiaj rano światło dzienne ukazało się Agavi 0.11 RC5, oprócz poprawek błędów z wersji RC4 doszło parę nowości: - Pełne wsparcie dla generowania WSDL, automatyczne mapowanie akcji a nawet wsparcie dla obsługi nagłówków SOAP. - Wsparcie dla transformacji plików konfiguracyjnych poprzez zamieszczanie instrukcji < ?xml-stylesheet?> - Wsparcie dla przestrzeni nazw w plikach konfiguracyjnych - Automatyczna obsługa magic_quotes dla zmiennych superglobalnych
Pojawiły się drobne zmiany w API do obsługi configów oraz nowy sposób ich odczytu, który wejdzie do użytku w wersji 1.0. Póki co jest tylko testowy a jedynym handlerem, który został zaimplementowany "na nowo" jest ten obsługujący WSDL.
Dodam, że Agavi to pierwszy framework PHP, który rozwiązuje kwestie dostępu do akcji w tak elastyczny sposób. Niezależnie od tego jakim sposobem zostało przysłane żądanie akcja wygląda tak samo. Jest to krok w stronę dojrzałych rozwiązań tj Spring Framework. Pytanie tylko - czy developerom uda się zachować pierwotną prostotę i ile pracy trzeba będzie włożyć w użycie danego rozwiązania? Odpowiedź na nie pozostaje póki co zagadką a pełnej oceny będziemy mogli dokonać po ukazaniu się wersji 1.0 wraz z dokumentacją.
Zainteresowanych naturalnie Agavi zapraszam do traca i przeglądania źródeł wersji 0.11 RC5. :)