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 […]

Stało się to co miało się stać, czyli o left-pad

Kilka dni temu w świadku javascriptowym wybuchła „bomba”. Zaczęło się niewinnie, bo firma o nazwie Kik poprosiła Azera Koçulu, by raczył wycofać z repozytorium npm swój pakiet o nazwie Kik. Fakap 1 W czasach obecnych należy zastanowić się czy sławetny javascript drink name nie powinien być jakoś znormalizowany i tworząc aplikację nie powinieneś wystąpić o […]

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 […]

Utrzymanie wielu wersji API w obcym środowisku cz. I

ProkrastynacjaW Straszna rzecz. Szczególnie w połączeniu z ogólnym wypaleniem się tematów do opisywania. Dziś jednak zaczynamy zabawę z pewnym rozwiązaniem, które ostatnio staram się „wyczarować”. Opis problemu Jeżeli klient daje nam wolną rękę co do infrastruktury albo sami jesteśmy własnym klientem i mamy swobodę decydowania o tym na czym posadzimy aplikację to jest naprawdę fajnie. Gorzej […]

Dwa słowa o typach własnych

Wiele osób nie lubi tworzyć własnych specyficznych dla domeny typów, które nie niosą ze sobą wartości biznesowej. Przykładowo po co tworzyć własny typ reprezentujący wiek skoro można oprzeć się o starego dobrego inta? Z moich obserwacji wynika, że przyczyna tego zachowania leży w niechęci do pisania jakiegokolwiek dodatkowego kodu, czyli zazwyczaj testów. Zamiast tego dzielnie […]

System rezerwacji sal – część 0 – co chcę zrobić

Mam pomysł na apkę z serii „do poćwiczenia”. Będzie to system rezerwowania sal w firmie. Jest to przymiarka do trochę innego zadania, które obecnie nazywam „głównym projektem”. Architektura – zarys Mamy dwa główne elementy z których chcemy korzystać. Pierwszy to baza (jakaś, nie koniecznie baza danych) użytkowników, którzy pracują sobie w biurach. Drugi to informacja […]

Gdzie Diabeł nie może tam Wrapper pośle

All problems in computer science can be solved by another level of indirection – David Wheeler I tego się trzymajmy. Jednak nie byłbym sobą, gdybym nie pokazał zastosowania tej reguły na przykłądzie z życia wziętym. Problem Mamy niezmienialną (w sensie – nie możemy zmienić kodu) klasę reprezentującą jakąś informację. W naszym przypadku była to encja […]

Clean services, albo mikro architektura…

Jak cholerę zwał tak zwał. Generalnie ostatnie spotkania Wrocławskiego JUGa dały mi trochę do myślenia. Pierwsze z Wujkiem Bobem było poświęcone Clean Architecture. Wcześniej Andrzej Bednarz opowiadał nam o swoich doświadczeniach z tym rozwiązaniem, ale tu mieliśmy okazję „u żródła”. Drugie poświęcone architekturze mikroserwisów poprowadzone przez Roberta Firka było swoinstym dopełnieniem. O co chodzi? Clean […]

Typy prymitywne z logiką biznesową wstęp do dobrego kodu

Większość aplikacji obiektowych, które są tworzone jak świat długi i szeroki nie ma za dużo wspólnego z OOP. Przynajmniej na poziomie modelu. Ten został w czasach proceduralno-strukturalnych. Mamy zatem klasy, które w rzeczywistości są strukturami znanymi z C tyle tylko, że wyposażonymi w gettry i settery. Te klasy są trochę jak aktorki w filmach porno. […]

Interfejsy z implementacją w Javie 8

Zastanawialiście się kiedyś po co w Javie 8 wprowadzono interfejsy z (domyślną) implementacją? Oczywiście można powiedzieć, że dzięki temu mamy miksiny/domknięcia/traity czy jak to tam zwał w zależności od punktu odniesienia. Ale czy taka konstrukcja nie jest przez przypadek rozwiązaniem znacznie poważniejszego problemu projektowego? Jak zrobić API? API, czyli po ludzku interfejs aplikacji/biblioteki/narzędzia itp. Java […]