SlideShare a Scribd company logo
Systematyczny aarrcchhiitteekktt nnaa 
ddrrooddzzee kkuu ppllaannoowwaanneemmuu 
ppoossttaarrzzaanniiuu
O mnie : 
Jarosław Pałka
• chief architect @ Lumesse 
• owner/founder/one man orchestra @ 
symentis.pl 
• blogger @ geekyprimitives.wordpress.com 
• philosopher @ twitter:j_palka 
• code mangler @ bitbucket:kcrimson & 
github:jpalka 
• evil emperor @ 4developers conf/architecture 
track 
• restrained Padawan @ church of JVM
„Created weakness for the numbers on the 
board 
Absurd amount of things, obsolete creation 
The lust for always more, indulgence in 
hunger 
A greed for power, the demon needs to feed 
… 
Designed for failure” 
Gojira – Planned Obsolescence
„strategia producenta, mająca na celu 
takie projektowanie towarów, aby miały 
one ograniczony czas użytecznego życia, po 
tym zaś okresie stawały się niesprawne, a 
często nieopłacalne w naprawie. Towary te 
zwykle psują się zaraz po upływie 
gwarancji.” 
Wikipedia
Techniki „planowanego” postarzania 
… nowy lepszy paradygmat … 
… nowa wersja biblioteki … 
… nowy język programowania … 
… nowe lepsze API ... 
… brak kompatybilności wstecznej …
Jakby tego było mało 
trendy
„We are fashion industry” 
Uncle Bob
Rewrite 
Offload 
Modernization 
Next Generation Something™
Kilka lat później
Rewrite 
Offload 
Modernization 
Next Generation Something™
Organizacje dostają wysypki na 
samą myśl 
o kolejnym 
offload, rewrite, NG projekcie
Dobry inżynier, 
Idź szukaj business value, 
szukaj
Podejście Big-Bang 
Uczymy się na żywym organizmie 
Ludzie z businessu trzymają się na dystans 
Brak zrozumienia domeny problemu
„It is up to us to live up to the legacy that was 
left for us, and to leave a legacy that is worthy 
of our children and of future generations.” 
Christine Gregoire
Nie naprawimy przeszłości, 
Ale możemy uczynić przyszłość lepszą
Mózg, co 
będziemy 
dziś robić?
Dodamy kolejny framework!
Przygotujmy się na lepszą przyszłość 
Przygotujmy się na zmiany
Abstrakcje
Posługujemy się nimi na co dzień 
Są zapisane w naszej podświadomości 
Dlatego tak trudno o nich rozmawiać
Polimorfizm
Znaczenie ukryte za fasadą słów
„Czy mógłbyś otworzyć zamek?” 
Brak jednoznaczności abstrakcji
Znaczenie = abstrakcja(kontekst)
public interface TalkingAboutAbstractions{ 
public void createEmployee(String candidate); 
}
public vois hireCandidate(){ 
String candidate = "Jan Kowalski"; 
employeeBean.createEmployee(candidate); 
candidate = 
"<candidate><id>123456</id></candidate>"; 
employeeBean.createEmployee(candidate); 
candidate = "{ candidate : {id : "123456"} }"; 
employeeBean.createEmployee(candidate); 
}
public interface TalkingAboutAbstractions{ 
public Employee 
hireCandidate(Supplier<Candidate >candidate); 
}
public interface GuessWhatIHaveInMind{ 
String serverStatus() throws Exception; 
}
„OK” 
„Mam się dobrze” 
„Cholera gdzie jest dysk?” 
„Daj mi spokoój” 
„!@#$%^&*()”
public interface GuessWhatIHaveInMind{ 
public enum ServerStatus { OK, BUSY, INTERNAL_ERROR } 
ServerStatus serverStatus() throws Exception; 
}
A teraz czas na coś z klasyki 
Prawdziwy, 
Autentyczny, 
jedyny
Brainfuck
public class BrainFuck extends GenericHibernateDAO{ 
List<Object[]> processList(String target, Long id); 
}
public class BrainFuck extends GenericHibernateDAO{ 
ResultSet processList(String target, Long id); 
}
Use types, Luke!
Buisness logic 
& 
system construction 
& 
code infrastructure
public class SoftwareConstruction<K,V> implements BeanFactoryAware, 
DisposableBean { 
@Override 
@SuppressWarnings("unchecked") 
public void setBeanFactory(final BeanFactory beanFactory) throws 
BeansException 
{ 
consumerConfigurations = (Map<String, ConsumerConfiguration<K,V>>) 
(Object) ((ListableBeanFactory) 
beanFactory).getBeansOfType(ConsumerConfiguration.class); 
} 
}
Nie mieszajmy odpowiedzialności 
Odpowiedzialność to nie tylko 
„business features” 
Obiekt nie może być odpowiedzialny za 
skonstruowanie samego siebie
public interface ShowMeMore{ 
@GET 
public Response getRoot( 
@Context HttpServletRequest request); 
}
public class ShowMeMoreImpl implements 
ShowMeMore{ 
@Context 
private HttpServletRequest request; 
@GET 
public Response getRoot(); 
}
Struktura systemu
Gęstość informacji
„Hierarchies are brilliant systems inventions, 
not only because they give a system 
stability and resilience, but also because they 
reduce the amount of information that 
any part of the system has to keep track of.”
„Hierarchies are brilliant systems inventions, 
not only because they give a system 
stability and resilience, but also because they 
reduce the amount of information that 
any part of the system has to keep track of.”
„In hierarchical systems relationships within 
each subsystem are denser and stronger 
than relationships between subsystems. 
Everything is still connected to everything 
else, but not equally strongly.”
„In hierarchical systems relationships within 
each subsystem are denser and stronger 
than relationships between subsystems. 
Everything is still connected to everything 
else, but not equally strongly.”
„Hierarchical systems are partially 
decomposable. Their subsystems with their 
especially dense information links can 
function at least partially as systems in their 
own right. When hierarchies break down, they 
usually split along their subsystem 
boundaries” 
Donella Meadows
„Hierarchical systems are partially 
decomposable. Their subsystems with their 
especially dense information links can 
function at least partially as systems in their 
own right. When hierarchies break down, they 
usually split along their subsystem 
boundaries”
Value is Your Subsystem Boundary
Kandydat
Aplikant 
Kandydat
Bezrobotny 
Aplikant 
Kandydat
Bezrobotny 
Aplikant 
Kandydat
Value is 
usually 
Your subsystem boundary
„Encapsulation is the packing 
of data and functions into a 
single component.”
„Hierarchies are brilliant systems inventions, 
not only because they give a system 
stability and resilience, but also because they 
reduce the amount of information that 
any part of the system has to keep track of.”
public class WrongEncapsulation{ 
public String name; 
}
public class IsItEncapsulation{ 
private String name; 
}
public class JavaStyleEncapsulation{ 
private String name; 
public String getName(){ ... }; 
public void setName(String name){ 
… 
}; 
}
Software design porn
public class AnotherStylishClass{ 
private List<String> strings = new ArrayList<>(); 
public List<String> getStrings(){ 
return strings; 
} 
AnotherStylishCase obj = new AnotherStylishCase(); 
obj.getStrings().add("Hello leaky abstraction!"); 
}
… Jakie są granice szaleństwa ...
… Jakie są granice szaleństwa ...
Kiedy znowu zobaczysz Java Bean, 
usuń go, 
poważnie, 
natychmiast, 
git rm AnotherStupidJavaBean.java
Jedyne rzeczy które warto zapamiętać
Abstrakcje 
Polimorfizm 
Context is King 
Gęstość informacji 
Enkapsulacja 
Hierarchical Systems 
Software construction 
vs 
business logic
Systematyczny architekt na drodze ku planowanemu postarzaniu

More Related Content

Similar to Systematyczny architekt na drodze ku planowanemu postarzaniu

[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...Future Processing
 
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariowaćJakub Marchwicki
 
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...PROIDEA
 
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...Future Processing
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Natalia Stanko
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówWydawnictwo Helion
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architectureJaroslaw Palka
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayTomasz Dziuda
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danychkalaxq
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 

Similar to Systematyczny architekt na drodze ku planowanemu postarzaniu (17)

[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
 
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować
 
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
4Developers 2015: Przejrzysty i testowalny kod na Androidzie? Spróbujmy z Cle...
 
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
 
Java Data Objects
Java Data ObjectsJava Data Objects
Java Data Objects
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architecture
 
Java. Potrzaski
Java. PotrzaskiJava. Potrzaski
Java. Potrzaski
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training Day
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Behat
BehatBehat
Behat
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Android i REST
Android i RESTAndroid i REST
Android i REST
 
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 

Systematyczny architekt na drodze ku planowanemu postarzaniu