Archiwum

Archive for Grudzień 2010

Nowy sposób programowania … no może nie taki nowy

31/12/2010 Dodaj komentarz

Ostatnie spostrzeżenia (poprzednie dwa posty) doprowadziły do dalszych wniosków. Poprzez nowy sposób tworzenia proxy (post 1), to jakie daje to możliwości; oraz próbę stworzenia skondensowanego kodu do operowania na elementach kolekcji (post 2) doszedłem do tego:

      1) Tworząc proxy na obiektach klasy bazowej mogę „nagrywać” ich zachowanie.
      2) Nagrywanie może polegać na przechwyceniu zamiaru wywołania danej metody na rzecz obiketu wskazanej klasy, bez faktycznego wywoływania tego (co jest korzystne, kiedy potrzebujemy tylko dowiedzieć się o zamiarze, bo samo wywołanie może być kosztowne lub czasochłonne).
      3) Takie nagranie (daną metodę) można odtwarzać wielokrotnie, zmieniając obiekt na rzecz którego jest to wywoływane lub przekazywane argumenty.

Poniżej kod pokazuje to (z zaznaczenie która elementy z powyższego opisu są realizowane):

		LazyEvaluation<Person> lazyEvaluation = lazyEvaluation(Person.class); \\ 1
		lazyEvaluation.record().setName("newName"); \\ 2
		lazyEvaluation.doItForEach(persons); \\ 1

Czytaj dalej…

Kategorie:Java Tagi:

Dynamic proxy

28/12/2010 Dodaj komentarz

Trafiłem ostatnio na nowy sposób tworzenie dynamicznego proxy. Przezwycięża on braki standardowego (znanego mi dotychczas) rozwiązania. Pozwala na tworzenie proxy na podstawie konkretnych klas, a nie tylko interfejsów.

Do tego celu jest używana biblioteka cglib. Kręciła się ona od dawna w mym otoczeniu (choćby Spring) i z grubsza wiedziałem do czego ona służy (coś z generacją kodu). Jednak jakoś nie miałem okazji zagłębić się w nią. Ostatni trafiłem na nią okrężną drogą, poprzez mockito.
Miałem potrzebę napisania narzędzia do tworzenia proxy. Chciałem stworzyć to za pomocą dotychczas znanego mi mechanizmu (wiedząc o jego ograniczeniach) i tu zaistniało olśniewające skojarzenie faktów ;). Po co mam godzić się na te ograniczenia, skoro wydaje się że jest masa kodu, gdzie nie jest to problemem. Pewnie wcześneij gdy pojawiała się tak myśl to próbowałem grzebać w dużych projektach, typu Spring, Hibernate czy JBoss. Gdzie po pewnym czasie grzebania w źródłach dawałem sobie spokój. Teraz jednak może dzięki uporowi, nabytemu już doświadczeniu, czy właśnie prostocie przykładu dotarłem do wiedzy :).
Przebijając się przez kod mockito dotarłem do klasy Enhancer, która to początek swój ma w cglib (wydaje się być żywcem skopiowana z tego projektu ;)).

Tak więc wyłuskałem ją do swych potrzeb i mogłem rozszerzyć swój kod o tworzenie proxy dla klas (bez potrzeby tworzenia dla nich interfejsów).
Czytaj dalej…

Kategorie:Java Tagi:

Dalej dziwne konstrukcje

27/12/2010 Dodaj komentarz

Wpadłem ostatnio w nastrój tworzenia niewielkich konstrukcji, które mogą zamknąć, w „zgrabniejszy” sposób, koncepcje jakie stoją za danym fragmentem kodu. Zaczęło się to chyba z tym postem.
Pisanie w ten sposób jest próbą wyrażenia inaczej czegoś co i tak najczęściej ląduje w statycznych metodach narzędziowych.
Głównym kryterium jest tu jak najlepsze wyrażenie koncepcji, kosztem wydajności, czy czasem nieporadności konstrukcji – stąd te dziwne konstrukcje ;).

Pierwszym przykładem jest swich na stringach. Nie będę tu oceniał zasadności takiej struktury. Podobno ma wejść to z nową wersją javy, ale jak to pokaże niże, można to mieć już teraz.

Ważne jest uświadomienie sobie czego się chcę. Czy słówko kluczowe akceptujące konkretny rodzaj argumentów? Czy realizacje określonego sposobu kodowania w oparciu o dany rodzaj argumentu?
Czytaj dalej…

Kategorie:Java Tagi: ,