Posted by: Ivko | November 8, 2009

Избор на седмицата (45/09)

Тази седмица беше доста интересна откъм четиво на тема Java. За първи път ми се налага да филтрирам съдържание, за да смогна да го обработя и да ви го представя тук. Навръх Архангеловден (честито на имениците!), ето какво избрах за вас:

The three circles of developer web testing

Излезе поредният брой на Java Power Tools newsletter-а. Това е поредица, водена от автора на едноименната книга John Ferguson Smart и вече представяна в предишни издания от тази поредица. Тази седмица на нашето внимание са представени няколко аспекта на тестването на Web приложения.

Правейки аналогия с далеко-източната философия, авторът ни въвежда във въпросните гледни точки, като започва с най-high level погледа: acceptance testing. Там, използвайки frameworks, които ни позволяват на човешки език да си дефинираме сценарии, проверяваме дали след въвеждане на някакъв input и натискане на даден бутон или връзка, това предизвиква очаквания ефект на резултатната страница.

Във вторият “кръг” нещата стават малко по-технически и се набляга основно на corner cases, error handling и пр. Тук отново имаме един куп инфраструктури (frameworks, embedded web servers,…), които ни помагат в нашата работа.

И накрая идва третият кръг – най-технически от всички. За разлика от предишните кръгове, където ударението е върху view слоя (HTML, JSP страничките), тук се набляга на тестване на controller логиката в нашата програма.

Beautiful code with Google collections and Guava, part 3

Преди няколко седмици ви представих първата серия от тази поредица за двете библиотеки на Google (съвсем скоро ще се слеят в една). Втората серия не ме впечатли особено, така че я пропуснах.

Сега обаче в трета част е показано как може с помощта на Function и Predicate интерфейсите да правим в Java неща, които бяха считани за запазена марка за функционалните езици (Scala да речем). Implement-ването на въпросните интерфейси прави кода ни донякъде да наподобява на ползване на closures. И по този начин може съвсем спокойно да си дефинираме и прилагаме филтри върху колекции, да ги сортираме според наши правила (не едно, а няколко), да им трансформираме съдържанието. И всичко това без да пишем 3-4 класа и стотина излишни реда код.

Using a Service Delegate to avoid MVC controller bloat

Напоследък java.net възобновиха публикуването на статии, а даже от тази седмица оповестиха (пре)откриването и на JavaTech секцията. В articles колонката обаче беше поместена интересна статийка на тема как можем да изкараме излишния код от controller класа в MVC модела на нашите приложения.

Авторът започва с кратко въведение, в което споменава какво го е провокирало да напише следващите редове. Повечето програмисти при писането на приложения (а не frameworks!), притиснати от кратките срокове, а понякога и от мързел, забравят за добрите design принципи. Едно от най-често нарушаваните правила е controller класът ни (по MVC pattern-а) да съдържа голяма част от бизнес логиката.

Според автора (а и според мен) тази локига трябва да бъде изнесена в специални класове, които се грижат за комуникацията с data layer-а, с обработването на резултатите и т.н. Той нарича тези класове service delegates. Единствената работа на controller-а е да обработва HTTP request обекта, да делегира на service-ите и накрая да връща получения резултат в HTTP response-а.

Интересно четиво, въпреки че избрания подход за междинен клас със статични методи между controller-а и service delegate-а не ми допада. Но какво ти разбирам аз🙂

Dependency Injection in Java EE – part 1

TheServerSide започна поредица на тема JSR 299 – Java Contexts and Dependency Injection (CDI). Автори са Reza Rahman и Scott Ferguson. Първият е добре известен на читателите на този blog. Освен, че е съавтор на EJB 3 in Action, той е и участник в експерт групата за Java EE 6 и за EJB 3 спецификациите. Тази есен той изнесе и няколко презентации на Java 2 days конференцията в София.

Какво представлява JSR 299: Contexts and dependency injection? На някои от вас това може да е познато като WebBeans (това е предишното име на проекта). CDI e гръбнакът на Java EE 6 спецификацията, ако мога така да се изразя. Взимайки най-добрите практики от JBoss Seam, Spring и Google Guice, спецификацията дефинира модел на обектите в едно Java EE 6 приложение, техният lifecycle, начинът, по който си взаимодействат (или inject-ват) и доста други полезни неща. Всички обикновени java bean-ове, EJB-тата, JSF компонентите и както ни обещават – servlet-ите, са обекти на спецификацията (т.е. можем да се възмолзваме от възможностите й при тяхното писане).

Специално за dependency injection частта, CDI се базира на JSR 330 (Dependency Injection for Java), която дефинира основните анотации при деклариране на dependency-та между различни обекти. Същите анотации са запазени и в CDI.

В първата част от поредицата, авторите ни въвеждат в дебрите на новата материя, като ни показват какви са подобренията спрямо Java EE 5. Разказват ни за основните видове scope на различните managed bean-ове (така се наричат обектите, чийто lifecycle се управлява от dependency injection контейнера). А накрая ни показват как можем да си направим съвсем просто Web приложение с JPA, Stateless session bean и JSP (макар че последното е пропуснато).


Responses

  1. Авторе, дали ще ни зарадваш с анализ на Google Go скоро? http://golang.org/

  2. Хмм, това прилича повече на C++ отколкото на Java. Бих го разгледал, но не и преди да направя детайлно представяне на езици като Groovy и Scala, които са си върху виртуалната машина на Java

    Все пак, благодаря за предложението!🙂

  3. Проблемът с MVC controller bloat всъщност е частен случай на един по-общ софтуерен антипатърн, наречен Blob (в оригиналния смисъл на думата – голямо зелено нещо, което иска да погълне света, да не се бърка с SQL-типа данно BLOB).

    Разглеждания тук подлучай е най-често срещан при проектиране на приложения в интегрирани Dev-среди по принципа “първо потребилтелския интерфейс”.

    Както проблема, така и решението са изследвани в детайли в книгата “AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis” от William J. Brown, Raphael C. Malveau, Hays W. McCormick, Thomas J. Mowbray. Макар и десетгодишна, нищо в нея до ден днешен не е загубило актуалност – например горното решение за решане на “MVC” проблема е едно към едно взето от тази книга.

    Особена ценнност на книгата са простите правила как да се види проблем, дори когато не се е ясно проявил още. Авторите го наричат “анекдотично доказателство”. За описания проблем анекдотичното доказателство гласи: “Този клас е сърцето на нашата архитектура.”


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Categories

%d bloggers like this: