JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

75
Systematyczny architekt na Systematyczny architekt na drodze ku planowanemu drodze ku planowanemu postarzaniu postarzaniu

description

Czym jest planowane postarzanie produktu? Zapewne wielu z was spotkało się z tym określeniem, oznaczającym planowane działania mające na celu skrócenie czasu życia produktu na rynku, w mniej lub bardziej szczytnym celu. Jak to się ma do tworzenia oprogramowania? Podczas prezentacji opowiem jak ważnym elementem tej strategi są właściwe "abstrakcje w kontekście", jak efektywnie oddzielić "software construction" od "infrastructure code" i "business logic" i dlaczego właściwa architektura, która pozwala podjąć decyzje technologicznie jak najpóźniej, lub nawet odłożyć je na jutro, które nie nadejdzie, może pomóc wam i przyszłym pokoleniom, tych którzy będą musieli pracować z kodem odziedziczonym po was.

Transcript of JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Page 1: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Systematyczny architekt na Systematyczny architekt na drodze ku planowanemu drodze ku planowanemu postarzaniupostarzaniu

Page 2: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

O mnie : Jarosław Pałka

Page 3: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - 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

Page 4: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka
Page 5: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„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

Page 6: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„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

Page 7: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka
Page 8: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Techniki „planowanego” postarzania

… nowy lepszy paradygmat …… nowa wersja biblioteki …

… nowy język programowania …… nowe lepsze API ...

… brak kompatybilności wstecznej …

Page 9: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Jakby tego było mało

trendy

Page 10: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„We are fashion industry”Uncle Bob

Page 11: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Rewrite

Offload

Modernization

Next Generation Something™

Page 12: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Kilka lat później

Page 13: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Rewrite

Offload

Modernization

Next Generation Something™

Page 14: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Organizacje dostają wysypki na samą myśl o kolejnym

offload, rewrite, NG projekcie

Page 15: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Dobry inżynier,Idź szukaj business value,szukaj

Page 16: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Podejście Big-Bang

Uczymy się na żywym organizmie

Ludzie z businessu trzymają się na dystans

Brak zrozumienia domeny problemu

Page 17: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka
Page 18: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„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

Page 19: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Nie naprawimy przeszłości,Ale możemy uczynić przyszłość lepszą

Page 20: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Mózg, cobędziemy dziś robić?

Page 21: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Dodamy kolejny framework!

Page 22: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Przygotujmy się na lepszą przyszłość

Przygotujmy się na zmiany

Page 23: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Abstrakcje

Page 24: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Posługujemy się nimi na co dzień

Są zapisane w naszej podświadomości

Dlatego tak trudno o nich rozmawiać

Page 25: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Polimorfizm

Page 26: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Znaczenie ukryte za fasadą słów

Page 27: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka
Page 28: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka
Page 29: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka
Page 30: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„Czy mógłbyś otworzyć zamek?”

Brak jednoznaczności abstrakcji

Page 31: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Znaczenie = abstrakcja(kontekst)

Page 32: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public interface TalkingAboutAbstractions{

public void createEmployee(String candidate);

}

Page 33: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

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);

}

Page 34: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public interface TalkingAboutAbstractions{

public Employee hireCandidate(Supplier<Candidate >candidate);

}

Page 35: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public interface GuessWhatIHaveInMind{

String serverStatus() throws Exception;

}

Page 36: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„OK”

„Mam si dobrzeę ”

„Cholera gdzie jest dysk?”

„Daj mi spokoój”

„!@#$%^&*()”

Page 37: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public interface GuessWhatIHaveInMind{

public enum ServerStatus { OK, BUSY, INTERNAL_ERROR }

ServerStatus serverStatus() throws Exception;

}

Page 38: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

A teraz czas na coś z klasyki

Prawdziwy, Autentyczny,

jedyny

Page 39: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Brainfuck

Page 40: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public class BrainFuck extends GenericHibernateDAO{

List<Object[]> processList(String target, Long id);

}

Page 41: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public class BrainFuck extends GenericHibernateDAO{

ResultSet processList(String target, Long id);

}

Page 42: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Use types, Luke!

Page 43: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Buisness logic &

system construction&

code infrastructure

Page 44: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

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); }

}

Page 45: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Nie mieszajmy odpowiedzialności

Odpowiedzialność to nie tylko „business features”

Obiekt nie może być odpowiedzialny za skonstruowanie samego siebie

Page 46: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public interface ShowMeMore{

@GETpublic Response getRoot(

@Context HttpServletRequest request);

}

Page 47: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public class ShowMeMoreImpl implements ShowMeMore{

@Contextprivate HttpServletRequest request;

@GETpublic Response getRoot();

}

Page 48: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Struktura systemu

Page 49: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Gęstość informacji

Page 50: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„Hierarchies are brilliant systems inventions, not only because they give a systemstability and resilience, but also because they reduce the amount of information thatany part of the system has to keep track of.”

Page 51: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„Hierarchies are brilliant systems inventions, not only because they give a systemstability and resilience, but also because they reduce the amount of information thatany part of the system has to keep track of.”

Page 52: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„In hierarchical systems relationships within each subsystem are denser and strongerthan relationships between subsystems. Everything is still connected to everythingelse, but not equally strongly.”

Page 53: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„In hierarchical systems relationships within each subsystem are denser and strongerthan relationships between subsystems. Everything is still connected to everythingelse, but not equally strongly.”

Page 54: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„Hierarchical systems are partially decomposable. Their subsystems with theirespecially dense information links can function at least partially as systems in theirown right. When hierarchies break down, they usually split along their subsystemboundaries”

Donella Meadows

Page 55: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„Hierarchical systems are partially decomposable. Their subsystems with theirespecially dense information links can function at least partially as systems in theirown right. When hierarchies break down, they usually split along their subsystemboundaries”

Page 56: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka
Page 57: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Value is Your Subsystem Boundary

Page 58: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Kandydat

Page 59: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Aplikant

Kandydat

Page 60: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Aplikant

Kandydat

Bezrobotny

Page 61: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Aplikant

Kandydat

Bezrobotny

Page 62: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Value is usually

Your subsystem boundary

Page 63: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„Encapsulation is the packing of data and functions into a single component.”

Page 64: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

„Hierarchies are brilliant systems inventions, not only because they give a systemstability and resilience, but also because they reduce the amount of information thatany part of the system has to keep track of.”

Page 65: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public class WrongEncapsulation{public String name;

}

Page 66: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public class IsItEncapsulation{private String name;

}

Page 67: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

public class JavaStyleEncapsulation{

private String name;

public String getName(){ ... };

public void setName(String name){ …

};

}

Page 68: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Software design porn

Page 69: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

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!");

}

Page 70: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

… Jakie są granice szaleństwa ...

Page 71: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

… Jakie są granice szaleństwa ...

Page 72: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Kiedy znowu zobaczysz Java Bean,usuń go,

poważnie,natychmiast,

git rm AnotherStupidJavaBean.java

Page 73: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

Jedyne rzeczy które warto zapamiętać

Page 74: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka

AbstrakcjePolimorfizm

Context is King

Gęstość informacjiEnkapsulacja

Hierarchical Systems

Software construction vs

business logic

Page 75: JDD2014: Systematyczny architekt na drodze ku postarzaniu produktu - Jarosław Pałka