Slide 1

Slide 1 text

OD SMUTNEGO MONOLITU DO MODULARNEGO MONOLITU HISTORIA PRAWDZIWEJ REFAKTORYZACJI

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

LAYERS ⬇ RULESETS ⬇ VIOLATIONS

Slide 14

Slide 14 text

DependsOnDisallowedLayer FYUL\Clean\OrderSubmission\Application\OrderSubmissionService must not depend on FYUL\Clean\OrderSubmission\Adapter\Out\Http\Request\SendOrderToProductionRequest You are depending on token that is a part of a layer that you are not allowed to depend on. (Adapter) /opt/project/srcHexagonal/OrderSubmission/Application/OrderSubmissionService.php:23

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

VERTICAL ↕

Slide 17

Slide 17 text

parameters: paths: - ./srcHexagonal layers: - name: Domain collectors: - type: classNameRegex value: /^.*\\Domain\\.*/ - name: Adapter collectors: - type: classNameRegex value: /^.*\\Adapter\\.*/ - name: Application collectors: - type: classNameRegex value: /^.*\\Application\\.*/ - name: Framework collectors: - type: classNameRegex value: /^.*\\Framework\\.*/ - name: SharedKernel collectors: - type: classNameRegex value: /^SharedKernel\\.*/ ruleset: Domain: - SharedKernel Application: - SharedKernel - Domain Adapter: - Application - SharedKernel - Domain Framework: - Domain - Application - Adapter - SharedKernel

Slide 18

Slide 18 text

HORIZONTAL ↔

Slide 19

Slide 19 text

parameters: paths: - ./srcHexagonal - ./src layers: - name: Legacy collectors: - type: directory value: src/.* - name: OrderCancelation collectors: - type: classNameRegex value: /^FYUL\\Clean\\OrderCancelation\\.*/ - name: OrderSubmission collectors: - type: classNameRegex value: /^FYUL\\Clean\\OrderSubmission\\.*/ - name: StockContext collectors: - type: classNameRegex value: /^FYUL\\Clean\\StockContext\\.*/ - name: SharedKernel collectors: - type: classNameRegex value: /^FYUL\\Clean\\SharedKernel\\.*/ ruleset: OrderSubmission: - SharedKernel OrderCancelation: - SharedKernel StockContext: - SharedKernel Legacy: - OrderSubmission - OrderCancelation - StockContext - SharedKernel

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

deptrac: skip_violations: FYUL\Clean\OrderCancelation\Adapter\Out\Http\HttpCancel: - FYUL\PublicAPI\Domain\Order\DTO\CancelItemInfo - FYUL\Clean\StockContext\Adapter\Out\HttpGetStockData deptrac: skip_violations: FYUL\Clean\OrderSubmission\Application\ExchangeStorage\OrderSubmissionFailureStorage: - FYUL\Clean\OrderSubmission\Adapter\Out\Http\Request\SendOrderToProductionRequestInterface

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

ORDER SUBMISSION ⬇ SHARED KERNEL ⬇ ORDER QA ⬇ DATABASE

Slide 24

Slide 24 text

ORDER SUBMISSION ⬇ ⬇ ⬇ ASYNC EVENT API REQUEST ORDER QA SERVICE

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

• Zanim dotkniesz kodu, zbuduj wspólny język w zespole (ubiquitous language) • Zgoda i wola całego zespołu to fundament wizji długoterminowej • Refaktoryzacja to nie big-bang, ale maraton małych kroków • Green f ield obok legacy – osobny katalog pozwala strzec granic bez walki ze starym kodem • Narzędzia statycznej analizy egzekwują architekturę lepiej niż ustalenia w głowach inżynierów • Najpierw granice w monolicie (nawet proste), potem dopiero rozmowa o wydzieleniu serwisu • Mikroserwis wyciągasz wtedy, gdy cechy architektury tego wymagają – nie wtedy, gdy masz dość monolitu

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content