<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title>Chemaclass - ddd</title><subtitle>Tech Lead sharing practical insights on software craftsmanship, TDD, leadership, Bitcoin, and AI. Blog posts, book summaries, and conference talks.</subtitle><link rel="self" type="application/atom+xml" href="https://chemaclass.com/tags/ddd/atom.xml"/><link rel="alternate" type="text/html" href="https://chemaclass.com"/><generator uri="https://www.getzola.org/">Zola</generator><updated>2020-09-10T00:00:00+00:00</updated><id>https://chemaclass.com/tags/ddd/atom.xml</id><entry xml:lang="en"><title>Domain-Driven Design Distilled</title><category term="ddd" scheme="https://chemaclass.com/tags/ddd/" label="Ddd"/><category term="architecture" scheme="https://chemaclass.com/tags/architecture/" label="Architecture"/><category term="software-design" scheme="https://chemaclass.com/tags/software-design/" label="Software Design"/><published>2020-09-10T00:00:00+00:00</published><updated>2020-09-10T00:00:00+00:00</updated><author><name>
Vaughn Vernon</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/readings/domain-driven-design-distilled/"/><id>https://chemaclass.com/readings/domain-driven-design-distilled/</id><summary type="html">Domain-Driven Design Distilled brings DDD to life. Whether you're a developer, consultant, or customer, it will help you understand it, so you can benefit from its power.</summary><content type="html">&lt;p>Domain-Driven Design Distilled brings DDD to life. Whether you’re a developer, consultant, or customer, it will help
you understand it, so you can benefit from its power.&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;hr />
&lt;p>This book delivers powerful results in practice, which is why developers worldwide are rapidly moving to adopt it.
This is an accessible guide to the basics:&lt;/p>
&lt;ul>
&lt;li>What is DDD?&lt;/li>
&lt;li>What problems does it solve?&lt;/li>
&lt;li>How does it work?&lt;/li>
&lt;li>How to quickly gain value from it?&lt;/li>
&lt;/ul>
&lt;p>You’ll learn how to segregate domain models using the powerful &lt;strong>Bounded Contexts&lt;/strong> pattern, to develop a &lt;strong>Ubiquitous
Language&lt;/strong> within an explicitly bounded context and help &lt;strong>domain experts&lt;/strong> and &lt;strong>developers work together&lt;/strong> to create
that language.&lt;/p>
&lt;p>How to use Subdomains to handle legacy systems and integrate multiple Bounded Contexts to define team relationships and
technical mechanisms.&lt;/p>
&lt;blockquote>
&lt;p>Domain-Driven Design Distilled brings &lt;strong>DDD&lt;/strong> to life.&lt;/p>
&lt;/blockquote></content></entry><entry xml:lang="en"><title>Clean Architecture</title><subtitle>A Craftsman's Guide to Software Structure and Design</subtitle><category term="architecture" scheme="https://chemaclass.com/tags/architecture/" label="Architecture"/><category term="software-design" scheme="https://chemaclass.com/tags/software-design/" label="Software Design"/><category term="clean-code" scheme="https://chemaclass.com/tags/clean-code/" label="Clean Code"/><category term="ddd" scheme="https://chemaclass.com/tags/ddd/" label="Ddd"/><published>2018-06-04T00:00:00+00:00</published><updated>2018-06-04T00:00:00+00:00</updated><author><name>
Robert C. Martin</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/readings/clean-architecture/"/><id>https://chemaclass.com/readings/clean-architecture/</id><summary type="html">Robert C. Martin's guide to SOLID principles, component design, and architectural boundaries that keep software systems flexible, testable, and maintainable over time.</summary><content type="html">&lt;span id="continue-reading">&lt;/span>&lt;h3 id="code-design-principles-solid">Code design principles (SOLID)
&lt;a class="heading-anchor" href="#code-design-principles-solid" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Single Responsibility&lt;/strong>: a class should have one, and only one, reason to change. Or the new version: a module
should be responsible to one, and only one, actor.&lt;/li>
&lt;li>&lt;strong>Open-closed&lt;/strong>: a class should be open for extension but closed for modification.&lt;/li>
&lt;li>&lt;strong>Liskov’s Substitution&lt;/strong>: objects in a program should be replaceable with instances of their subtypes without
altering the correctness of that program.&lt;/li>
&lt;li>&lt;strong>Interface Segregation&lt;/strong>: many client-specific interfaces are better than one general-purpose interface.&lt;/li>
&lt;li>&lt;strong>Dependency Inversion&lt;/strong> : one should depend upon abstractions, not concretions.&lt;/li>
&lt;/ul>
&lt;h3 id="component-principles">Component principles
&lt;a class="heading-anchor" href="#component-principles" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;h4 id="component-cohesion">Component cohesion
&lt;a class="heading-anchor" href="#component-cohesion" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>Reuse/Release Equivalence&lt;/strong> Principle: classes and modules (i.e. a component) reused together should be released
together. They should have the same version number and there should be proper documentation such as changelogs.&lt;/li>
&lt;li>&lt;strong>Common Closure&lt;/strong> Principle: classes that change together should be grouped together, and vice versa. The single
responsibility principle at component-level.&lt;/li>
&lt;li>&lt;strong>Common Reuse&lt;/strong> Principle: don’t force users of a component to depend on things they don’t need. The Interface
Segregation Principle at component-level.&lt;/li>
&lt;/ul>
&lt;h4 id="component-coupling">Component coupling
&lt;a class="heading-anchor" href="#component-coupling" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>Acyclic Dependencies&lt;/strong> Principle: no cycle in the dependency graph. Cycles couple components and, among other
things, force them to be to released together. Use the dependency inversion principle to break cycles.&lt;/li>
&lt;li>&lt;strong>The Stable Dependency&lt;/strong> Principle: less stable components should depend on more stable components. Depend on the
direction of stability.&lt;/li>
&lt;li>&lt;strong>Stable Abstractions&lt;/strong> Principle: stable components should be abstract, and vice versa. An example of an abstract
stable component is a high-level policy which is changed by extension following the open-closed principle.&lt;/li>
&lt;/ul>
&lt;h3 id="architecture-principles">Architecture principles
&lt;a class="heading-anchor" href="#architecture-principles" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;h4 id="setting-boundaries">Setting boundaries
&lt;a class="heading-anchor" href="#setting-boundaries" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;p>Boundaries are lines that separate software elements. They separate things that matter from things that don’t, i.e.
high-level components from low-level components. If a high-level component depends on a low-level component at the
source level, changes in the low-level components will spread to the high-level component. Therefore, we place a
boundary between the two, using polymorphism to invert the logic flow. This is the Dependency Inversion Principle in the
SOLID principles.&lt;/p>
&lt;h4 id="separating-layers">Separating layers
&lt;a class="heading-anchor" href="#separating-layers" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;p>We can identify four main layers, although the number may vary:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Entities&lt;/strong>: objects containing critical business logic. For example, a bank could establish that no loans are
granted to customers not satisfying some credit score requirements. Entities may be shared across apps in the same
enterprise.&lt;/li>
&lt;li>&lt;strong>Use-cases&lt;/strong>: app-specific business rules. For example, the sequence of screens to execute a bank transfer.&lt;/li>
&lt;li>&lt;strong>Interface adapters&lt;/strong>: Gateways, presenters and controllers. For example, this layer will contain the MVC
architecture of the GUI and also objects that transform data between the format of the database and the use-cases.&lt;/li>
&lt;li>&lt;strong>Frameworks and drivers&lt;/strong>: web frameworks, database, the view of MVC.&lt;/li>
&lt;/ul></content></entry></feed>