Co to jest architektura?
Ale która?
Enterprise Architecture – struktura całości
Infrastructure Architecture – krzem i okolice
System Architecture – automatyzacja zadań
Application Architecture – białkologia
Kiedy wybieramy architekturę?
Na początku?
Na końcu?
W „środku”?
Nigdy!
Architektura jest żywa!
Czym się kierujemy?
Czy architektura to technologia?
To zależy
Architektura zależy od technologii
Jest ograniczona przez technologię
Jest motywowana technologią
Architektura jako element marketingu
Intel Inside™
Czyli co to obchodzi klienta
Problem z 1991r
Nauczmy konsumenta szukać logo
A software system can best be designed if the testing is interlaced with the designing instead of being used after the design.
TDD
The good systems that are presently working were written by small groups. More than twenty programmers working on a project is usually disastrous.
Scrum?
Each stage produced a usable product and the period between the end of one stage and the start of the next provided the operational experience upon which the next design was based.
Nihil Novi

Moda na architekturę
SOA
Mikroserwisy
Blockchain
It's all the same fucking day, man
A gdyby tak…
napisać klocki LEGO?
Kod modularny
Dostępny w prawie każdym języku
Wsparcie w narzędziach
Prosty koncepcyjnie
Jak go uzyskać?
Prawa fizyki kodu
Niezależne od architektury
Wynikają z obserwacji
Dobrze znane reguły
TDD
BDD
YAGNI
DRY
KISS
Wzorce
DDD
}
OO BDSM
Koszty
@Test
public void client_registration_via_sso(){
Client newClient = new Client(DEFAULT_NAME);
Registration reg = regServ.register(newClient);
assertEquals(reg.client, newClient);
assertNotNull(reg.clientIdCard);
assertNot(reg.passwordData);
}
@Test
public void client_registration_via_sso(){
Client newClient = giveMeNewClientNoPass();
Registration reg = regServ.register(newClient);
assertThat(reg)
.isForClient(newClient)
.hasClientIdCard()
.isFromSSO();
}
@Test
public void client_registration_via_sso(){
Client newClient = new Client(DEFAULT_NAME);
Registration reg = regServ.register(newClient);
assertEquals(reg.client, newClient);
assertNotNull(reg.clientIdCard);
assertNot(reg.passwordData);
}
@Test
public void client_registration_via_sso(){
Client newClient = giveMeNewClientNoPass();
Registration reg = regServ.register(newClient);
assertThat(reg)
.isForClient(newClient)
.hasClientIdCard()
.isFromSSO();
}
Koszt (czas)
Zasada 80/20
ROI
Prawo malejącej użyteczności krańcowej
Fetysz code coverage
Początkowe wydłużenie czasu implementacji
Konieczność szkolenia i samodoskonalenia
Dodatkowa infrastruktura
Ryzyko złego wyboru
Dobry kod
Przestrzega reguł
Mądrze je łamie
Ponieważ wynika z reguł architektury
Jak to sprawdzić?
Nie testuj architektury
Bo się nie da :D
Sprawdzaj kod
Narzędzia
Checkstyle i PMD
Structure 101
Archunit
A co ze wdrożeniem?
Architektura wdrożeniowa
Nie zależy od systemu
Wdrożenie to inny system
Nasz system jest daną dla wdrożenia
Musi spełniać wymagania systemu wdrożeniowego
Segfault – Łódź 2019
By Bartek Kuczyński
Segfault – Łódź 2019
Prezentacja z SegFault Łódź 2019
- 548