Systematyczny architekt na drodze ku planowanemu postarzaniu

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? Być może nie tak planowane, jak często chaotyczne, jednak ciągle mamy do czynienia z nieustannym procesem postarzania naszych bibliotek, kontenerów aplikacji, języków, narzędzi i API. oprócz sil wywieranych przez biznes na naszą aplikację, jest ona też po wpływem potężnych ruchów technologicznych, wynikających z nieustannych zmian w trendach tworzenia oprogramowania. Jak efektywnie uniknąć powolnego postarzania się technologicznego naszej aplikacji? Jak uniknąć wysokich kosztów, odkładanych w nieskończoność modernizacji technologicznych aplikacji? Jak uzasadnić wartość biznesową kolejnego "big up front total next generation rewrite"? A może by tak uwolnić się od hegemoni frameworków, bibliotek i kontenerów i oddać całą władzę w ręce programistów? 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 Systematyczny architekt na drodze ku planowanemu postarzaniu

Page 1: Systematyczny architekt na drodze ku planowanemu postarzaniu

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

Page 2: Systematyczny architekt na drodze ku planowanemu postarzaniu

O mnie : Jarosław Pałka

Page 3: Systematyczny architekt na drodze ku planowanemu postarzaniu

• 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: Systematyczny architekt na drodze ku planowanemu postarzaniu
Page 5: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu
Page 8: Systematyczny architekt na drodze ku planowanemu postarzaniu

Techniki „planowanego” postarzania

… nowy lepszy paradygmat …… nowa wersja biblioteki …

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

… brak kompatybilności wstecznej …

Page 9: Systematyczny architekt na drodze ku planowanemu postarzaniu

Jakby tego było mało

trendy

Page 10: Systematyczny architekt na drodze ku planowanemu postarzaniu

„We are fashion industry”Uncle Bob

Page 11: Systematyczny architekt na drodze ku planowanemu postarzaniu

Rewrite

Offload

Modernization

Next Generation Something™

Page 12: Systematyczny architekt na drodze ku planowanemu postarzaniu

Kilka lat później

Page 13: Systematyczny architekt na drodze ku planowanemu postarzaniu

Rewrite

Offload

Modernization

Next Generation Something™

Page 14: Systematyczny architekt na drodze ku planowanemu postarzaniu

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

offload, rewrite, NG projekcie

Page 15: Systematyczny architekt na drodze ku planowanemu postarzaniu

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

Page 16: Systematyczny architekt na drodze ku planowanemu postarzaniu

Podejście Big-Bang

Uczymy się na żywym organizmie

Ludzie z businessu trzymają się na dystans

Brak zrozumienia domeny problemu

Page 17: Systematyczny architekt na drodze ku planowanemu postarzaniu
Page 18: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu

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

Page 20: Systematyczny architekt na drodze ku planowanemu postarzaniu

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

Page 21: Systematyczny architekt na drodze ku planowanemu postarzaniu

Dodamy kolejny framework!

Page 22: Systematyczny architekt na drodze ku planowanemu postarzaniu

Przygotujmy się na lepszą przyszłość

Przygotujmy się na zmiany

Page 23: Systematyczny architekt na drodze ku planowanemu postarzaniu

Abstrakcje

Page 24: Systematyczny architekt na drodze ku planowanemu postarzaniu

Posługujemy się nimi na co dzień

Są zapisane w naszej podświadomości

Dlatego tak trudno o nich rozmawiać

Page 25: Systematyczny architekt na drodze ku planowanemu postarzaniu

Polimorfizm

Page 26: Systematyczny architekt na drodze ku planowanemu postarzaniu

Znaczenie ukryte za fasadą słów

Page 27: Systematyczny architekt na drodze ku planowanemu postarzaniu
Page 28: Systematyczny architekt na drodze ku planowanemu postarzaniu
Page 29: Systematyczny architekt na drodze ku planowanemu postarzaniu
Page 30: Systematyczny architekt na drodze ku planowanemu postarzaniu

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

Brak jednoznaczności abstrakcji

Page 31: Systematyczny architekt na drodze ku planowanemu postarzaniu

Znaczenie = abstrakcja(kontekst)

Page 32: Systematyczny architekt na drodze ku planowanemu postarzaniu

public interface TalkingAboutAbstractions{

public void createEmployee(String candidate);

}

Page 33: Systematyczny architekt na drodze ku planowanemu postarzaniu

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: Systematyczny architekt na drodze ku planowanemu postarzaniu

public interface TalkingAboutAbstractions{

public Employee hireCandidate(Supplier<Candidate >candidate);

}

Page 35: Systematyczny architekt na drodze ku planowanemu postarzaniu

public interface GuessWhatIHaveInMind{

String serverStatus() throws Exception;

}

Page 36: Systematyczny architekt na drodze ku planowanemu postarzaniu

„OK”

„Mam si dobrzeę ”

„Cholera gdzie jest dysk?”

„Daj mi spokoój”

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

Page 37: Systematyczny architekt na drodze ku planowanemu postarzaniu

public interface GuessWhatIHaveInMind{

public enum ServerStatus { OK, BUSY, INTERNAL_ERROR }

ServerStatus serverStatus() throws Exception;

}

Page 38: Systematyczny architekt na drodze ku planowanemu postarzaniu

A teraz czas na coś z klasyki

Prawdziwy, Autentyczny,

jedyny

Page 39: Systematyczny architekt na drodze ku planowanemu postarzaniu

Brainfuck

Page 40: Systematyczny architekt na drodze ku planowanemu postarzaniu

public class BrainFuck extends GenericHibernateDAO{

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

}

Page 41: Systematyczny architekt na drodze ku planowanemu postarzaniu

public class BrainFuck extends GenericHibernateDAO{

ResultSet processList(String target, Long id);

}

Page 42: Systematyczny architekt na drodze ku planowanemu postarzaniu

Use types, Luke!

Page 43: Systematyczny architekt na drodze ku planowanemu postarzaniu

Buisness logic &

system construction&

code infrastructure

Page 44: Systematyczny architekt na drodze ku planowanemu postarzaniu

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: Systematyczny architekt na drodze ku planowanemu postarzaniu

Nie mieszajmy odpowiedzialności

Odpowiedzialność to nie tylko „business features”

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

Page 46: Systematyczny architekt na drodze ku planowanemu postarzaniu

public interface ShowMeMore{

@GETpublic Response getRoot(

@Context HttpServletRequest request);

}

Page 47: Systematyczny architekt na drodze ku planowanemu postarzaniu

public class ShowMeMoreImpl implements ShowMeMore{

@Contextprivate HttpServletRequest request;

@GETpublic Response getRoot();

}

Page 48: Systematyczny architekt na drodze ku planowanemu postarzaniu

Struktura systemu

Page 49: Systematyczny architekt na drodze ku planowanemu postarzaniu

Gęstość informacji

Page 50: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu
Page 57: Systematyczny architekt na drodze ku planowanemu postarzaniu

Value is Your Subsystem Boundary

Page 58: Systematyczny architekt na drodze ku planowanemu postarzaniu

Kandydat

Page 59: Systematyczny architekt na drodze ku planowanemu postarzaniu

Aplikant

Kandydat

Page 60: Systematyczny architekt na drodze ku planowanemu postarzaniu

Aplikant

Kandydat

Bezrobotny

Page 61: Systematyczny architekt na drodze ku planowanemu postarzaniu

Aplikant

Kandydat

Bezrobotny

Page 62: Systematyczny architekt na drodze ku planowanemu postarzaniu

Value is usually

Your subsystem boundary

Page 63: Systematyczny architekt na drodze ku planowanemu postarzaniu

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

Page 64: Systematyczny architekt na drodze ku planowanemu postarzaniu

„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: Systematyczny architekt na drodze ku planowanemu postarzaniu

public class WrongEncapsulation{public String name;

}

Page 66: Systematyczny architekt na drodze ku planowanemu postarzaniu

public class IsItEncapsulation{private String name;

}

Page 67: Systematyczny architekt na drodze ku planowanemu postarzaniu

public class JavaStyleEncapsulation{

private String name;

public String getName(){ ... };

public void setName(String name){ …

};

}

Page 68: Systematyczny architekt na drodze ku planowanemu postarzaniu

Software design porn

Page 69: Systematyczny architekt na drodze ku planowanemu postarzaniu

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: Systematyczny architekt na drodze ku planowanemu postarzaniu

… Jakie są granice szaleństwa ...

Page 71: Systematyczny architekt na drodze ku planowanemu postarzaniu

… Jakie są granice szaleństwa ...

Page 72: Systematyczny architekt na drodze ku planowanemu postarzaniu

Kiedy znowu zobaczysz Java Bean,usuń go,

poważnie,natychmiast,

git rm AnotherStupidJavaBean.java

Page 73: Systematyczny architekt na drodze ku planowanemu postarzaniu

Jedyne rzeczy które warto zapamiętać

Page 74: Systematyczny architekt na drodze ku planowanemu postarzaniu

AbstrakcjePolimorfizm

Context is King

Gęstość informacjiEnkapsulacja

Hierarchical Systems

Software construction vs

business logic

Page 75: Systematyczny architekt na drodze ku planowanemu postarzaniu