Monolit? Mikroserwisy?

A czy to ważne?

Bartek „Koziołek” Kuczyński / @koziolek

Po co?

Rola programisty w architekturze

Pokazać zmiany w czasie

Wyjaśnić pewne pojęcia

Dodatkowo

Historia

Relacja z Architekturą

Demonstracja narzędzi

Kiedy wybieramy architekturę

Na początku była architektura

+ Duża swoboda

+ Możliowść eksperymentowania

- Źle dobrane narzędzia

- Zła skala

Cecha „młodych zespołów”

W kolejnym sprincie

+ Mamy pojęcie o wymaganiach

+ Możemy szacować zasoby

- Impotencja decyzyjna

- Legacy code

„Jesteśmy doświadczeni”

Na końcu też była architektura

+ Wiemy co jest grane

- Jazda bez trzymanki

- Jednak nie wiemy co jest grane

Kto sieje ASAP ten...

Nie wybieramy architektury

+ Jest przetestowana

± Zmień organizację lub zmień organizację

- Mała elastyczność

- Koszty klienta

„Korpo greenfield”

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

Moda na architekturę

SOA

Mikroserwisy

Blockchain

It's all the same fucking day, man

Zagrożenia

Bo komputer to urządzenie elektryczne

Nekromancja i Demonologia

Usługi Cthulhu

Usługi zombie

Usługi wampiry

Jak od tego uciec?

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

Zasada 80/20

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

Findbugs

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