<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Architecture Decisions on Ardalis Clean Architecture</title><link>https://ardalis.github.io/CleanArchitecture/architecture-decisions/</link><description>Recent content in Architecture Decisions on Ardalis Clean Architecture</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://ardalis.github.io/CleanArchitecture/architecture-decisions/index.xml" rel="self" type="application/rss+xml"/><item><title>ADR 001: Replace Autofac with .NET DI</title><link>https://ardalis.github.io/CleanArchitecture/architecture-decisions/adr-001-dotnet-di-adoption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ardalis.github.io/CleanArchitecture/architecture-decisions/adr-001-dotnet-di-adoption/</guid><description>&lt;h1 id="adr-001-replace-autofac-with-net-core-dependency-injection"&gt;ADR 001: Replace Autofac with .NET Core Dependency Injection&lt;a class="anchor" href="#adr-001-replace-autofac-with-net-core-dependency-injection"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="status"&gt;Status&lt;a class="anchor" href="#status"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Accepted&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;a class="anchor" href="#context"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Initially, this repository employed Autofac for dependency injection. At the time of adoption, Autofac was preferred due to its robust feature set, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for advanced scenarios such as decorators and modules, which could be placed close to their corresponding implementations.&lt;/li&gt;
&lt;li&gt;A well-established history of stability and maturity, having been used in various projects before .NET Core&amp;rsquo;s built-in DI was fully featured.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As the .NET ecosystem evolved, the built-in DI container began to meet the needs of our project without introducing the added complexity associated with Autofac. The .NET DI framework has matured significantly, offering sufficient functionality for typical use cases, including:&lt;/p&gt;</description></item><item><title/><link>https://ardalis.github.io/CleanArchitecture/architecture-decisions/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ardalis.github.io/CleanArchitecture/architecture-decisions/readme/</guid><description>&lt;h1 id="architecture-decision-records-adr"&gt;Architecture Decision Records (ADR)&lt;a class="anchor" href="#architecture-decision-records-adr"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="what-is-an-architecture-decision-record-adr"&gt;What is an Architecture Decision Record (ADR)?&lt;a class="anchor" href="#what-is-an-architecture-decision-record-adr"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An Architecture Decision Record (ADR) documents significant architecture decisions made throughout a project, capturing the context, rationale, and consequences of each decision. This promotes transparency and provides a historical reference for future design considerations.&lt;/p&gt;
&lt;h2 id="purpose-of-adrs"&gt;Purpose of ADRs&lt;a class="anchor" href="#purpose-of-adrs"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Knowledge Management&lt;/strong&gt;: Consolidates architectural knowledge and decisions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collaboration&lt;/strong&gt;: Enhances team communication by documenting discussions and outcomes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clarity&lt;/strong&gt;: Provides clear reasoning behind design choices, making it easier for new team members to understand past decisions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="best-practices-for-writing-adrs"&gt;Best Practices for Writing ADRs&lt;a class="anchor" href="#best-practices-for-writing-adrs"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Be Specific&lt;/strong&gt;: Each ADR should address a single architectural decision. Avoid conflating multiple decisions into one record.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document Context&lt;/strong&gt;: Clearly explain the project’s context and relevant considerations that influenced the decision. Include team dynamics and priorities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rationale and Consequences&lt;/strong&gt;: Describe the reasons for the decision, including pros and cons, and outline the implications of the decision for the project and&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;future architecture.
4. &lt;strong&gt;Immutable Records&lt;/strong&gt;: Once an ADR is created, avoid altering it. Instead, create a new ADR to reflect any changes or updates.
5. &lt;strong&gt;Timestamp Entries&lt;/strong&gt;: Include timestamps to track when each decision was made, especially for aspects that may evolve over time (e.g., costs, schedules).
6. &lt;strong&gt;Use Templates&lt;/strong&gt;: Utilize established templates for consistency and completeness in documenting ADRs.&lt;/p&gt;</description></item></channel></rss>