<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>#CleanArchitecture Archives - Halil Durmus</title>
	<atom:link href="https://www.halildurmus.com/tag/cleanarchitecture/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.halildurmus.com/tag/cleanarchitecture/</link>
	<description>Official Website</description>
	<lastBuildDate>Sun, 21 Jun 2026 21:43:14 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.halildurmus.com/wp-content/uploads/2020/06/1-HalilDurmusRetina-150x150.png</url>
	<title>#CleanArchitecture Archives - Halil Durmus</title>
	<link>https://www.halildurmus.com/tag/cleanarchitecture/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Clean Architecture&#8217;ta Pipeline Behavior Kullanımı</title>
		<link>https://www.halildurmus.com/2026/06/22/clean-architectureta-pipeline-behavior-kullanimi/</link>
					<comments>https://www.halildurmus.com/2026/06/22/clean-architectureta-pipeline-behavior-kullanimi/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Mon, 22 Jun 2026 05:00:00 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[#CleanArchitecture]]></category>
		<category><![CDATA[#DotNetArchitecture]]></category>
		<category><![CDATA[#MediatR]]></category>
		<category><![CDATA[#PipelineBehavior]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=5224</guid>

					<description><![CDATA[<p>Kurumsal .NET projelerinde kod tabanı büyüdükçe en büyük problem, iş kurallarının teknik detaylar arasında kaybolmasıdır. Özellikle CRM, ERP ve entegrasyon yoğun sistemlerde; validation, logging ve transaction gibi konular zamanla her handler’ın içine dağılır. Bu da hem okunabilirliği hem de sürdürülebilirliği ciddi şekilde zorlaştırır. Clean Architecture bu noktada sadece katmanları ayırmakla kalmaz, sorumlulukları da net bir [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2026/06/22/clean-architectureta-pipeline-behavior-kullanimi/">Clean Architecture&#8217;ta Pipeline Behavior Kullanımı</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Kurumsal .NET projelerinde kod tabanı büyüdükçe en büyük problem, iş kurallarının teknik detaylar arasında kaybolmasıdır. Özellikle CRM, ERP ve entegrasyon yoğun sistemlerde; validation, logging ve transaction gibi konular zamanla her handler’ın içine dağılır. Bu da hem okunabilirliği hem de sürdürülebilirliği ciddi şekilde zorlaştırır.</p>



<p class="wp-block-paragraph">Clean Architecture bu noktada sadece katmanları ayırmakla kalmaz, <strong>sorumlulukları da net bir şekilde ayrıştırmayı</strong> hedefler. Command / Query ayrımı ve MediatR Pipeline Behavior’lar bu yaklaşımın pratikte en güçlü uygulamalarından biridir.</p>



<h4 class="wp-block-heading">Command ve Query Ayrımı Neden Önemlidir?</h4>



<p class="wp-block-paragraph">Sistemde gerçekleştirilen her operasyonun bir niyeti vardır ve bu niyetin kod üzerinden açıkça okunabilmesi büyük önem taşır. Command’lar uygulamanın state’ini değiştirirken, Query’ler yalnızca veri okuma amacıyla çalışır. İlk bakışta basit görünen bu ayrım, proje büyüdükçe kodun anlaşılabilirliğini ve bakım kolaylığını ciddi ölçüde artırır.</p>



<p class="wp-block-paragraph">Örneğin bir kullanıcı oluşturma işlemi ile kullanıcı detayı getirme işlemi aynı handler’da yer almamalıdır. Çünkü bu iki operasyonun sorumlulukları tamamen farklıdır.</p>



<div class="wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers" data-code-block-pro-font-family="" style="font-size:1rem;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * 1rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#282a36"><span style="background:#ebebe6;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#282a36">C#</span></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>public record CreateUserCommand(string Name, string Email)
    : IRequest&lt;Guid>;

public record GetUserByIdQuery(Guid Id)
    : IRequest&lt;UserDto>;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">record</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">CreateUserCommand</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4">string</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">Name</span><span style="color: #F6F6F4">, </span><span style="color: #F286C4">string</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">Email</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    : </span><span style="color: #97E1F1; font-style: italic">IRequest</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">Guid</span><span style="color: #F6F6F4">&gt;;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">record</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">GetUserByIdQuery</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">Guid</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">Id</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    : </span><span style="color: #97E1F1; font-style: italic">IRequest</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">UserDto</span><span style="color: #F6F6F4">&gt;;</span></span></code></pre><span style="display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#ebebe6;font-size:12px;line-height:1;position:relative">C#</span></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bu yaklaşım sayesinde bir geliştirici sadece class adına bakarak bile ilgili operasyonun <strong>veri değiştirip değiştirmediğini</strong> anlayabilir.</p>



<h4 class="wp-block-heading">MediatR ve Pipeline Behavior Mantığı</h4>



<p class="wp-block-paragraph">MediatR, Command ve Query’lerin tek bir merkezden yönetilmesini sağlar. Ancak asıl gücünü <strong>Pipeline Behavior</strong> yapısıyla gösterir. Pipeline Behavior’lar, handler çalışmadan önce ve sonra araya girerek ortak işlemleri merkezi bir noktadan yönetmemize olanak tanır.</p>



<p class="wp-block-paragraph">Bu yapı sayesinde validation, logging veya transaction gibi tekrar eden kodları her handler’ın içine yazmak yerine, tek bir yerden kontrol edebiliriz. Böylece handler’lar yalnızca iş kuralına odaklanır.</p>



<h4 class="wp-block-heading">Validation Pipeline ile Fail-Fast Yaklaşımı</h4>



<p class="wp-block-paragraph">Validation, çoğu projede handler içinde yapılan ve zamanla karmaşıklaşan bir süreçtir. Oysa validation, iş kuralı değil bir <strong>ön koşuldur</strong>. Bu nedenle handler’a hiç ulaşmadan kontrol edilmelidir.</p>



<p class="wp-block-paragraph">FluentValidation ile oluşturulan bir Validation Pipeline, gelen request’i önce doğrular. Hata varsa işlem hiç başlamadan durdurulur.</p>



<div class="wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers" data-code-block-pro-font-family="" style="font-size:1rem;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#282a36"><span style="background:#ebebe6;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#282a36">C#</span></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>public class ValidationBehavior&lt;TRequest, TResponse>
    : IPipelineBehavior&lt;TRequest, TResponse>
{
    public async Task&lt;TResponse> Handle(
        TRequest request,
        RequestHandlerDelegate&lt;TResponse> next,
        CancellationToken cancellationToken)
    {
        // Validation işlemleri
        return await next();
    }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">class</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">ValidationBehavior</span><span style="color: #F6F6F4">&lt;</span><span style="color: #FFB86C; font-style: italic">TRequest</span><span style="color: #F6F6F4">, </span><span style="color: #FFB86C; font-style: italic">TResponse</span><span style="color: #F6F6F4">&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">    : </span><span style="color: #97E1F1; font-style: italic">IPipelineBehavior</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">TRequest</span><span style="color: #F6F6F4">, </span><span style="color: #97E1F1; font-style: italic">TResponse</span><span style="color: #F6F6F4">&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">async</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">Task</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">TResponse</span><span style="color: #F6F6F4">&gt; </span><span style="color: #62E884">Handle</span><span style="color: #F6F6F4">(</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #97E1F1; font-style: italic">TRequest</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">request</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #97E1F1; font-style: italic">RequestHandlerDelegate</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">TResponse</span><span style="color: #F6F6F4">&gt; </span><span style="color: #FFB86C; font-style: italic">next</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #97E1F1; font-style: italic">CancellationToken</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">cancellationToken</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #7B7F8B">        // Validation işlemleri</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">return</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">next</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre><span style="display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#ebebe6;font-size:12px;line-height:1;position:relative">C#</span></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bu yaklaşımın en büyük faydası, sistemin <strong>fail-fast</strong> çalışması ve handler’ların gereksiz koddan arındırılmasıdır.</p>



<h4 class="wp-block-heading">Logging Pipeline ile İzlenebilirlik</h4>



<p class="wp-block-paragraph">Kurumsal uygulamalarda bir işlemin ne zaman, hangi parametrelerle ve kim tarafından tetiklendiğini bilmek kritik öneme sahiptir. Logging Pipeline, her Command veya Query’nin giriş ve çıkış noktalarını merkezi olarak loglamamıza olanak tanır.</p>



<div class="wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers" data-code-block-pro-font-family="" style="font-size:1rem;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * 1rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#282a36"><span style="background:#ebebe6;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#282a36">C#</span></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>_logger.LogInformation(
    "Handling {RequestName} with {@Request}",
    typeof(TRequest).Name,
    request);</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">_logger.</span><span style="color: #62E884">LogInformation</span><span style="color: #F6F6F4">(</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">Handling {RequestName} with {@Request}</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">typeof</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">TRequest</span><span style="color: #F6F6F4">).Name,</span></span>
<span class="line"><span style="color: #F6F6F4">    request);</span></span></code></pre><span style="display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#ebebe6;font-size:12px;line-height:1;position:relative">C#</span></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bu sayede:</p>



<ul class="wp-block-list">
<li>Handler’larda log tekrarı olmaz</li>



<li>Log formatı standartlaşır</li>



<li>Üretim ortamında hata ayıklamak kolaylaşır</li>
</ul>



<h4 class="wp-block-heading">Transaction Pipeline ile Tutarlı Veri Yönetimi</h4>



<p class="wp-block-paragraph">Transaction yönetimi, özellikle veri güncelleyen Command’lar için vazgeçilmezdir. Ancak bu işlemi her handler içinde yapmak, hem hata riskini artırır hem de kodu şişirir.</p>



<p class="wp-block-paragraph">Transaction Pipeline, yalnızca Command’lar için transaction başlatır ve handler başarıyla tamamlandığında commit eder. Bir hata oluştuğunda ise rollback otomatik olarak devreye girer.</p>



<div class="wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers" data-code-block-pro-font-family="" style="font-size:1rem;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * 1rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#282a36"><span style="background:#ebebe6;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#282a36">C#</span></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>await _dbContext.BeginTransactionAsync();
var response = await next();
await _dbContext.CommitAsync();</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> _dbContext.</span><span style="color: #62E884">BeginTransactionAsync</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F286C4">var</span><span style="color: #F6F6F4"> response </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">next</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> _dbContext.</span><span style="color: #62E884">CommitAsync</span><span style="color: #F6F6F4">();</span></span></code></pre><span style="display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#ebebe6;font-size:12px;line-height:1;position:relative">C#</span></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bu yapı sayesinde transaction yönetimi <strong>tek bir noktadan</strong> kontrol edilir ve tutarlılık sağlanır.</p>



<h4 class="wp-block-heading">Pipeline Sırası Neden Kritik?</h4>



<p class="wp-block-paragraph">Pipeline Behavior’ların sırası, sistemin davranışını doğrudan etkiler. Genellikle önerilen sıra şu şekildedir:</p>



<ul class="wp-block-list">
<li>Validation</li>



<li>Logging</li>



<li>Transaction</li>



<li>Handler</li>
</ul>



<p class="wp-block-paragraph">Bu sıralama sayesinde:</p>



<ul class="wp-block-list">
<li>Hatalı request’ler transaction açılmadan elenir</li>



<li>Log’lar anlamlı ve tutarlı olur</li>



<li>Performans gereksiz yüklerden korunur</li>
</ul>



<h4 class="wp-block-heading">Gerçek Hayatta Ne Kazandırır?</h4>



<p class="wp-block-paragraph">Bu yaklaşım, özellikle uzun süre yaşayan ve sürekli evrilen projelerde büyük avantaj sağlar. Kod okunabilirliği artar, yeni geliştiricilerin projeye adapte olması kolaylaşır ve değişen iş kurallarına daha hızlı yanıt verilebilir.</p>



<p class="wp-block-paragraph">Clean Architecture, CQRS ve Pipeline Behavior birlikte kullanıldığında, sistem sadece <strong>çalışan</strong> değil, aynı zamanda <strong>yaşayan ve büyüyebilen</strong> bir yapıya kavuşur.</p>
<p>The post <a href="https://www.halildurmus.com/2026/06/22/clean-architectureta-pipeline-behavior-kullanimi/">Clean Architecture&#8217;ta Pipeline Behavior Kullanımı</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2026/06/22/clean-architectureta-pipeline-behavior-kullanimi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
