<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jOpenSpace 2024 - Jiří Pinkas - DDD + Spring Modulith</title>
        <link>https://vhsky.cz/videos/watch/0361b6ee-ea58-40e8-be63-16a507dd6ff1</link>
        <description>Přednášející začíná tím, že vítá publikum a oznamuje, že bude mluvit o Domain-Driven Designu (DDD) a jeho spojení s Springem. DDD je koncept, který již používá nějakou dobu a jeho cílem je pomoci s architekturou aplikací, zejména s problémy, které přináší tradiční monolitické aplikace. Na začátku popisuje typickou monolitickou aplikaci, kde jsou všechny entity a logika aplikace uspořádány do jednoho velkého balíčku, což může vést k „špagetovému monstru“ – neudržitelné a chaotické struktuře, která zpomaluje vývoj. Tento přístup může být zpočátku efektivní, ale s časem se zvyšuje komplexita a s každou změnou může docházet k řetězovým chybám, což může vývojáře frustrovat a demotivovat. Přednášející upozorňuje na dvě základní cesty, jak se vypořádat s těmito problémy: mikroservisy a modulární monolit. U mikroservis varuje, že granularita (velikost jednotlivých služeb) je zásadní, neboť příliš malá granularita může vést k extrémní komplexitě, kterou je těžké spravovat. Naopak modulární monolit je monolitická aplikace, která je navržena modulárně, což usnadňuje případné oddělení částí aplikace do samostatných mikroservis. DDD nabízí principy, které pomáhají vyhnout se problémům spojeným s monolitickými a špatně navrženými mikroservisními aplikacemi. Tyto principy zahrnují modulární strukturu, bohaté doménové modely (Rich Domain Models) a práci s Bounded Contexts – logickými oddíly aplikace, které omezují šíření změn. Zvláštní pozornost věnuje agregátům v DDD, které slouží jako hranice konzistence a logiky v rámci aplikace a usnadňují práci s transakcemi a testováním. Dále popisuje novinku ve Spring ekosystému – Spring Modulith, který implementuje DDD a jeho best practices do Spring aplikací. Tento modul zajišťuje, že jednotlivé moduly aplikace zůstávají oddělené a že mezi nimi nemůže docházet k nekontrolovanému volání metod. Modul také podporuje doménové události (domain events), které umožňují odděleným částem aplikace komunikovat mezi sebou, aniž by byly pevně svázány. Přednášející zdůrazňuje, že DDD není vhodný pro každou aplikaci. Pokud je aplikace jednoduchá a neobsahuje složitou byznys logiku, může být jednodušší použít anemický model. Avšak pro aplikace s komplexní logikou doporučuje přejít na bohatý doménový model, aby se předešlo budoucím problémům s udržitelností kódu. Na závěr shrnuje výhody používání DDD a Spring Modulith a zmiňuje, že s tímto přístupem je možné vytvářet aplikace, které jsou modulární, dobře škálovatelné a udržitelné v dlouhodobém horizontu. Pokud vývojáři doposud používali anemický model a mají složitou byznys logiku, měli by zvážit přechod na DDD, aby se vyhnuli neudržitelnému kódu, který přirovnává ke „špagetovému monstru“. Poznámky z publika: L. Račanský: ta kniha je strašná, nečtěte ji! (shrnutí na InfoQ https://www.infoq.com/minibooks/domain-driven-design-quickly/) Tahle je lepší (Lukáš Křečan) https://www.amazon.com/Learning-Domain-Driven-Design-Aligning-Architecture/dp/1098100131</description>
        <lastBuildDate>Fri, 09 Oct 2026 12:43:03 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>PeerTube - https://vhsky.cz</generator>
        <image>
            <title>jOpenSpace 2024 - Jiří Pinkas - DDD + Spring Modulith</title>
            <url>https://vhsky.cz/lazy-static/avatars/e319b3c0-bb42-4b1e-88a4-7701f496a470.png</url>
            <link>https://vhsky.cz/videos/watch/0361b6ee-ea58-40e8-be63-16a507dd6ff1</link>
        </image>
        <copyright>All rights reserved, unless otherwise specified in the terms specified at https://vhsky.cz/about and potential licenses granted by each content's rightholder.</copyright>
        <atom:link href="https://vhsky.cz/feeds/video-comments.xml?videoId=0361b6ee-ea58-40e8-be63-16a507dd6ff1" rel="self" type="application/rss+xml"/>
    </channel>
</rss>