Monolit? Mikroserwisy?

A czy to ważne?

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

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