<?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>Bilgisayar - Halil Durmus</title>
	<atom:link href="https://www.halildurmus.com/category/bilgisayar/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.halildurmus.com/category/bilgisayar/</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>Bilgisayar - Halil Durmus</title>
	<link>https://www.halildurmus.com/category/bilgisayar/</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>
		<item>
		<title>Gerçek CRM Senaryolarıyla SOLID Prensipleri</title>
		<link>https://www.halildurmus.com/2026/03/08/gercek-crm-senaryolariyla-solid-prensipleri/</link>
					<comments>https://www.halildurmus.com/2026/03/08/gercek-crm-senaryolariyla-solid-prensipleri/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Sun, 08 Mar 2026 14:21:03 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Clean Architecture]]></category>
		<category><![CDATA[CRM Mimari]]></category>
		<category><![CDATA[Kod Kalitesi]]></category>
		<category><![CDATA[SOLID Prensipleri]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=5185</guid>

					<description><![CDATA[<p>Kurumsal projelerde, özellikle CRM, ERP, mikroservis mimarileri ve entegrasyon katmanlarında ölçeklenebilir, sürdürülebilir ve test edilebilir kod yazmak kritik önem taşır. Ayrıca, SOLID prensipleri bunu sağlayan yazılım tasarımının temel taşlarını oluşturur. Bu nedenle, bu yazıda SOLID prensiplerini gerçek CRM ve mikroservis senaryoları üzerinden, hatalı kod → doğru kod örnekleri ile açıklıyorum. Neden Kurumsal CRM Projelerinde SOLID [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2026/03/08/gercek-crm-senaryolariyla-solid-prensipleri/">Gerçek CRM Senaryolarıyla SOLID Prensipleri</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Kurumsal projelerde, özellikle CRM, ERP, mikroservis mimarileri ve entegrasyon katmanlarında ölçeklenebilir, sürdürülebilir ve test edilebilir kod yazmak kritik önem taşır. Ayrıca, SOLID prensipleri bunu sağlayan yazılım tasarımının temel taşlarını oluşturur. Bu nedenle, bu yazıda SOLID prensiplerini gerçek CRM ve mikroservis senaryoları üzerinden, hatalı kod → doğru kod örnekleri ile açıklıyorum.</p>



<h4 class="wp-block-heading"><strong>Neden Kurumsal CRM Projelerinde SOLID Zorunludur?</strong></h4>



<p class="wp-block-paragraph">Kurumsal CRM projelerinde kullanıcı sayısı, entegrasyon hacmi ve iş kuralları sürekli büyür. Bu nedenle SOLID prensipleri sadece “iyi uygulama” değildir; değişen iş kurallarına hızlı adapte olabilmek için zorunlu bir mimari disiplindir. Özellikle öğrenci, mezun, bursiyer ve okul gibi hiyerarşik yapılar SOLID uygulanmadığında hızla yönetilemez hâle gelir.</p>



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



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="600" height="400" src="https://www.halildurmus.com/wp-content/uploads/2025/12/Adsiz-tasarim.png" alt="" class="wp-image-5207" srcset="https://www.halildurmus.com/wp-content/uploads/2025/12/Adsiz-tasarim.png 600w, https://www.halildurmus.com/wp-content/uploads/2025/12/Adsiz-tasarim-300x200.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



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



<h4 class="wp-block-heading"><strong>1) Single Responsibility Principle (SRP)</strong></h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">B<em>ir sınıfın değişmesi için tek bir sebebi olmalı.</em></p>
</blockquote>



<h5 class="wp-block-heading"><strong>Gerçek Senaryo:</strong></h5>



<p class="wp-block-paragraph">Dynamics 365’ten öğrenci bilgisi çekip CRM’e kaydediyoruz. Ama aynı sınıf içinde hem mapping yapılıyor hem de veri kaydediliyor hem de log atılıyor.</p>



<h6 class="wp-block-heading"><strong>❌ Yanlış Tasarım</strong></h6>



<p class="wp-block-paragraph"></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 StudentService
{
    public void SyncStudent(D365Student d365)
    {
        // Mapping
        var student = new Student
        {
            Name = d365.FullName,
            School = d365.SchoolName,
            ScholarshipType = d365.ScholarshipType
        };

        // Save
        Database.Save(student);

        // Log
        File.AppendAllText("log.txt", $"{student.Name} synced");
    }
}</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">StudentService</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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SyncStudent</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">D365Student</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">d365</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #7B7F8B">        // Mapping</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">var</span><span style="color: #F6F6F4"> student </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">Student</span></span>
<span class="line"><span style="color: #F6F6F4">        {</span></span>
<span class="line"><span style="color: #F6F6F4">            Name </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> d365.FullName,</span></span>
<span class="line"><span style="color: #F6F6F4">            School </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> d365.SchoolName,</span></span>
<span class="line"><span style="color: #F6F6F4">            ScholarshipType </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> d365.ScholarshipType</span></span>
<span class="line"><span style="color: #F6F6F4">        };</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">        // Save</span></span>
<span class="line"><span style="color: #F6F6F4">        Database.</span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(student);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">        // Log</span></span>
<span class="line"><span style="color: #F6F6F4">        File.</span><span style="color: #62E884">AppendAllText</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">log.txt</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">, </span><span style="color: #DEE492">$&quot;</span><span style="color: #F286C4">{</span><span style="color: #F6F6F4">student</span><span style="color: #E7EE98">.</span><span style="color: #F6F6F4">Name</span><span style="color: #F286C4">}</span><span style="color: #E7EE98"> synced</span><span style="color: #DEE492">&quot;</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">3 ayrı sorumluluk → değiştiğinde sınıf patlar.</p>



<h6 class="wp-block-heading"><strong>✅ Doğru Tasarım (SRP uygulanmış)</strong></h6>



<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 StudentMapper
{
    public Student Map(D365Student d365) =>
        new Student
        {
            Name = d365.FullName,
            School = d365.SchoolName,
            ScholarshipType = d365.ScholarshipType
        };
}

public class StudentRepository
{
    public void Save(Student student)
    {
        Database.Save(student);
    }
}

public class Logger
{
    public void Log(string message)
    {
        File.AppendAllText("log.txt", message);
    }
}

public class StudentSyncService
{
    private readonly StudentMapper _mapper;
    private readonly StudentRepository _repo;
    private readonly Logger _logger;

    public StudentSyncService(StudentMapper mapper, StudentRepository repo, Logger logger)
    {
        _mapper = mapper;
        _repo = repo;
        _logger = logger;
    }

    public void Sync(D365Student d365)
    {
        var student = _mapper.Map(d365);
        _repo.Save(student);
        _logger.Log($"{student.Name} synced");
    }
}
</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">StudentMapper</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: #97E1F1; font-style: italic">Student</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Map</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">D365Student</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">d365</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">=&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">Student</span></span>
<span class="line"><span style="color: #F6F6F4">        {</span></span>
<span class="line"><span style="color: #F6F6F4">            Name </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> d365.FullName,</span></span>
<span class="line"><span style="color: #F6F6F4">            School </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> d365.SchoolName,</span></span>
<span class="line"><span style="color: #F6F6F4">            ScholarshipType </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> d365.ScholarshipType</span></span>
<span class="line"><span style="color: #F6F6F4">        };</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">StudentRepository</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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">Student</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">student</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        Database.</span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(student);</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">Logger</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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Log</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4">string</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">message</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        File.</span><span style="color: #62E884">AppendAllText</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">log.txt</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">, message);</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">StudentSyncService</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">private</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">readonly</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">StudentMapper</span><span style="color: #F6F6F4"> _mapper;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">private</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">readonly</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">StudentRepository</span><span style="color: #F6F6F4"> _repo;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">private</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">readonly</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">Logger</span><span style="color: #F6F6F4"> _logger;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">StudentSyncService</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">StudentMapper</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">mapper</span><span style="color: #F6F6F4">, </span><span style="color: #97E1F1; font-style: italic">StudentRepository</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">repo</span><span style="color: #F6F6F4">, </span><span style="color: #97E1F1; font-style: italic">Logger</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">logger</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        _mapper </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> mapper;</span></span>
<span class="line"><span style="color: #F6F6F4">        _repo </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> repo;</span></span>
<span class="line"><span style="color: #F6F6F4">        _logger </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> logger;</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Sync</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">D365Student</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">d365</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 style="color: #F286C4">var</span><span style="color: #F6F6F4"> student </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> _mapper.</span><span style="color: #62E884">Map</span><span style="color: #F6F6F4">(d365);</span></span>
<span class="line"><span style="color: #F6F6F4">        _repo.</span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(student);</span></span>
<span class="line"><span style="color: #F6F6F4">        _logger.</span><span style="color: #62E884">Log</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">$&quot;</span><span style="color: #F286C4">{</span><span style="color: #F6F6F4">student</span><span style="color: #E7EE98">.</span><span style="color: #F6F6F4">Name</span><span style="color: #F286C4">}</span><span style="color: #E7EE98"> synced</span><span style="color: #DEE492">&quot;</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>
<span class="line"></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>



<h4 class="wp-block-heading"><strong>2) Open/Closed Principle (OCP)</strong></h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>&#8220;Bir sınıf geliştirmeye açık, değişikliğe kapalı olmalı.&#8221;</em></p>
</blockquote>



<h5 class="wp-block-heading"><strong>Gerçek Senaryo:</strong></h5>



<p class="wp-block-paragraph">Okul → fakülte → bölüm gibi hiyerarşik yapılarda farklı kaynaklardan veri geliyor.<br>Yeni kaynak eklenince servisi değiştirmemek istiyoruz.</p>



<h6 class="wp-block-heading"><strong>❌ Yanlış Tasarım</strong></h6>



<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 FacultyImporter
{
    public List&lt;Faculty> Import(string sourceType)
    {
        if (sourceType == "D365")
        {
            // Dynamics 365 mapping
        }
        else if (sourceType == "SAP")
        {
            // SAP mapping
        }
        else if (sourceType == "CSV")
        {
            // CSV mapping
        }

        return new List&lt;Faculty>();
    }
}</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">FacultyImporter</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: #97E1F1; font-style: italic">List</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">Faculty</span><span style="color: #F6F6F4">&gt; </span><span style="color: #62E884">Import</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4">string</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">sourceType</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 style="color: #F286C4">if</span><span style="color: #F6F6F4"> (sourceType </span><span style="color: #F286C4">==</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">D365</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">        {</span></span>
<span class="line"><span style="color: #7B7F8B">            // Dynamics 365 mapping</span></span>
<span class="line"><span style="color: #F6F6F4">        }</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">else</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">if</span><span style="color: #F6F6F4"> (sourceType </span><span style="color: #F286C4">==</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">SAP</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">        {</span></span>
<span class="line"><span style="color: #7B7F8B">            // SAP mapping</span></span>
<span class="line"><span style="color: #F6F6F4">        }</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">else</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">if</span><span style="color: #F6F6F4"> (sourceType </span><span style="color: #F286C4">==</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">CSV</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">        {</span></span>
<span class="line"><span style="color: #7B7F8B">            // CSV mapping</span></span>
<span class="line"><span style="color: #F6F6F4">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">return</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">List</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">Faculty</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></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">Her yeni kaynakta <code>else if</code> ekleniyor → OCP ihlali.</p>



<h6 class="wp-block-heading"><strong>✅ Doğru Tasarım: Strategy Pattern ile OCP</strong></h6>



<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 interface IFacultySource
{
    List&lt;Faculty> Import();
}

public class D365FacultySource : IFacultySource
{
    public List&lt;Faculty> Import()
    {
        // Mapping logic
        return new();
    }
}

public class CsvFacultySource : IFacultySource
{
    public List&lt;Faculty> Import()
    {
        // CSV parsing logic
        return new();
    }
}

public class FacultyImporter
{
    private readonly IFacultySource _source;

    public FacultyImporter(IFacultySource source)
    {
        _source = source;
    }

    public List&lt;Faculty> Import() => _source.Import();
}</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">interface</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">IFacultySource</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1; font-style: italic">List</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">Faculty</span><span style="color: #F6F6F4">&gt; </span><span style="color: #62E884">Import</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">D365FacultySource</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">IFacultySource</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: #97E1F1; font-style: italic">List</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">Faculty</span><span style="color: #F6F6F4">&gt; </span><span style="color: #62E884">Import</span><span style="color: #F6F6F4">()</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #7B7F8B">        // Mapping logic</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">new</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>
<span class="line"></span>
<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">CsvFacultySource</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">IFacultySource</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: #97E1F1; font-style: italic">List</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">Faculty</span><span style="color: #F6F6F4">&gt; </span><span style="color: #62E884">Import</span><span style="color: #F6F6F4">()</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #7B7F8B">        // CSV parsing logic</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">new</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>
<span class="line"></span>
<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">FacultyImporter</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">private</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">readonly</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">IFacultySource</span><span style="color: #F6F6F4"> _source;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">FacultyImporter</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">IFacultySource</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">source</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        _source </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> source;</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">List</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">Faculty</span><span style="color: #F6F6F4">&gt; </span><span style="color: #62E884">Import</span><span style="color: #F6F6F4">() </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> _source.</span><span style="color: #62E884">Import</span><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">Yeni kaynak → Yeni sınıf ekleyip <code>IFacultySource</code> implement etmek yeterlidir.<br><strong>Mevcut kod değişmez.</strong></p>



<h4 class="wp-block-heading"><strong>3) Liskov Substitution Principle (LSP)</strong></h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>&#8220;Türetilmiş sınıflar, temel sınıfın yerine kullanılabilmelidir.&#8221;</em></p>
</blockquote>



<h5 class="wp-block-heading"><strong>Gerçek Senaryo:</strong></h5>



<p class="wp-block-paragraph">CRM’de <em>Kullanıcı Türü</em> hesaplayan bir servisimiz var:</p>



<ul class="wp-block-list">
<li>Lise Öğrencisi</li>



<li>Üniversite Öğrencisi</li>



<li>Mezun</li>
</ul>



<p class="wp-block-paragraph">Yanlış kalıtım → alt sınıf davranışı bozuyor.</p>



<h6 class="wp-block-heading"><strong>❌ Yanlış Tasarım</strong></h6>



<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 UserTypeCalculator
{
    public virtual string CalculateType(User user) 
        => "GeneralUser";
}

public class GraduateUserTypeCalculator : UserTypeCalculator
{
    public override string CalculateType(User user)
    {
        throw new Exception("Graduate user cannot be processed here");
    }
}</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">UserTypeCalculator</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">virtual</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">string</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">CalculateType</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">user</span><span style="color: #F6F6F4">) </span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">GeneralUser</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">GraduateUserTypeCalculator</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">UserTypeCalculator</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">override</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">string</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">CalculateType</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">user</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 style="color: #F286C4">throw</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">Exception</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">Graduate user cannot be processed here</span><span style="color: #DEE492">&quot;</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">Ana sınıfın beklediği davranış alt sınıfta bozulmuş.</p>



<h6 class="wp-block-heading"><strong>✅ Doğru Tasarım</strong></h6>



<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 interface IUserTypeCalculator
{
    string CalculateType(User user);
}

public class GraduateUserTypeCalculator : IUserTypeCalculator
{
    public string CalculateType(User user) 
        => "Graduate";
}

public class StudentUserTypeCalculator : IUserTypeCalculator
{
    public string CalculateType(User user) 
        => "Student";
}</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">interface</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">IUserTypeCalculator</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">string</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">CalculateType</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">user</span><span style="color: #F6F6F4">);</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">GraduateUserTypeCalculator</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">IUserTypeCalculator</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">string</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">CalculateType</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">user</span><span style="color: #F6F6F4">) </span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">Graduate</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">StudentUserTypeCalculator</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">IUserTypeCalculator</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">string</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">CalculateType</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">user</span><span style="color: #F6F6F4">) </span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">Student</span><span style="color: #DEE492">&quot;</span><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">Artık tüm sınıflar <strong>aynı kontratı düzgün şekilde</strong> uyguluyor.</p>



<h4 class="wp-block-heading"><strong>4) Interface Segregation Principle (ISP)</strong></h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>&#8220;Kullanmadığın metodu içeren interface&#8217;i implemente etme.&#8221;</em></p>
</blockquote>



<h5 class="wp-block-heading"><strong>Gerçek Senaryo:</strong></h5>



<p class="wp-block-paragraph">CRM’de kullanıcıya SMS, mail veya push bildirim gönderen bir servis var. Ancak bazı entegre sistemler SMS desteklemiyor, bu yüzden tek bir arayüz tüm ihtiyaçları karşılamıyor.</p>



<h6 class="wp-block-heading">❌ Yanlış Tasarım</h6>



<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 interface INotificationService
{
    void SendEmail();
    void SendSms();
    void SendPush();
}

public class EmailService : INotificationService
{
    public void SendEmail() { }
    public void SendSms() => throw new NotImplementedException();
    public void SendPush() => throw new NotImplementedException();
}</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">interface</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">INotificationService</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendEmail</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendSms</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendPush</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">EmailService</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">INotificationService</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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendEmail</span><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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendSms</span><span style="color: #F6F6F4">() </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">throw</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">NotImplementedException</span><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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendPush</span><span style="color: #F6F6F4">() </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">throw</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">NotImplementedException</span><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"><strong>Kullanmadığımız metotları implement etmek zorunda kalıyoruz → ISP ihlali.</strong></p>



<h6 class="wp-block-heading"><strong>✅ Doğru Tasarım</strong></h6>



<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 interface IEmailNotification
{
    void SendEmail();
}

public interface ISmsNotification
{
    void SendSms();
}

public interface IPushNotification
{
    void SendPush();
}

public class EmailService : IEmailNotification
{
    public void SendEmail() { }
}

public class SmsService : ISmsNotification
{
    public void SendSms() { }
}</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">interface</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">IEmailNotification</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendEmail</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">interface</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">ISmsNotification</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendSms</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">interface</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">IPushNotification</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendPush</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">EmailService</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">IEmailNotification</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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendEmail</span><span style="color: #F6F6F4">() { }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">SmsService</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">ISmsNotification</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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">SendSms</span><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"><strong>Her servis sadece ihtiyacı olan interface’i implement eder.</strong></p>



<h4 class="wp-block-heading"><strong>5) Dependency Inversion Principle (DIP)</strong></h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>&#8220;Üst seviye sınıflar, alt seviye sınıflara değil soyutlamalara bağlı olmalı.&#8221;</em><br></p>
</blockquote>



<h5 class="wp-block-heading"><strong>Gerçek Senaryo:</strong></h5>



<p class="wp-block-paragraph">CRM’e veri kaydeden bir servis var; <strong>ancak</strong> repository sınıfı doğrudan concrete bir sınıfa bağımlı olduğu için test yazılamıyor. <strong>Bu nedenle</strong>, yapı hem esnekliğini kaybediyor <strong>hem de</strong> bağımlılıklar artıyor.</p>



<h6 class="wp-block-heading">❌ <strong>Yanlış Tasarım (Test edilemez yapı)</strong></h6>



<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 class UserService
{
    private readonly UserRepository _repo = new UserRepository();

    public void Save(User user)
    {
        _repo.Save(user);
    }
}</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">UserService</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">private</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">readonly</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">UserRepository</span><span style="color: #F6F6F4"> _repo </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">UserRepository</span><span style="color: #F6F6F4">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">user</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        _repo.</span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(user);</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">Unit test yazılamaz, <strong>çünkü</strong> yapı doğrudan gerçek database’e bağlıdır; <strong>bu yüzden</strong> test ortamında izole edilemez.</p>



<h6 class="wp-block-heading"><strong>✅ Doğru Tasarım (Mocklanabilir ve test edilebilir)</strong></h6>



<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 interface IUserRepository
{
    void Save(User user);
}

public class UserRepository : IUserRepository
{
    public void Save(User user)
    {
        // DB logic
    }
}

public class UserService
{
    private readonly IUserRepository _repo;

    public UserService(IUserRepository repo)
    {
        _repo = repo;
    }

    public void Save(User user)
    {
        _repo.Save(user);
    }
}</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">interface</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">IUserRepository</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">user</span><span style="color: #F6F6F4">);</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">UserRepository</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">IUserRepository</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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">user</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #7B7F8B">        // DB logic</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<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">UserService</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">private</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">readonly</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">IUserRepository</span><span style="color: #F6F6F4"> _repo;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">UserService</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">IUserRepository</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">repo</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        _repo </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> repo;</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">user</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        _repo.</span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(user);</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">Artık test yazabiliriz:</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>&#91;Fact&#93;
public void Save_Should_Call_Repository()
{
    var repo = new Mock&lt;IUserRepository>();
    var service = new UserService(repo.Object);

    service.Save(new User());

    repo.Verify(x => x.Save(It.IsAny&lt;User>()), Times.Once);
}</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">&#91;</span><span style="color: #97E1F1; font-style: italic">Fact</span><span style="color: #F6F6F4">&#93;</span></span>
<span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Save_Should_Call_Repository</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 style="color: #F286C4">var</span><span style="color: #F6F6F4"> repo </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">Mock</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">IUserRepository</span><span style="color: #F6F6F4">&gt;();</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">var</span><span style="color: #F6F6F4"> service </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">UserService</span><span style="color: #F6F6F4">(repo.Object);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    service.</span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4">());</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    repo.</span><span style="color: #62E884">Verify</span><span style="color: #F6F6F4">(</span><span style="color: #FFB86C; font-style: italic">x</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> x.</span><span style="color: #62E884">Save</span><span style="color: #F6F6F4">(It.</span><span style="color: #62E884">IsAny</span><span style="color: #F6F6F4">&lt;</span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4">&gt;()), Times.Once);</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>



<h4 class="wp-block-heading"><strong>SOLID Uygulamasının En Büyük Kazancı</strong></h4>



<p class="wp-block-paragraph">SOLID uygulandığında kod tabanı öngörülebilir hale gelir. Böylece ekip değiştiğinde veya yeni bir modül eklendiğinde mevcut kodu kırma riski minimuma düşer. Entegrasyon projelerinde bu esneklik, değişiklik maliyetini ciddi şekilde azaltır.</p>



<h4 class="wp-block-heading"><strong>Sonuç</strong></h4>



<p class="wp-block-paragraph">SOLID prensipleri çoğu zaman teorik başlıklar gibi görünse de CRM yapıları, mikroservisler, entegrasyonlar ve kurumsal projelerde <strong>gerçek sorunları çözen pratik kurallardır</strong>:</p>



<ul class="wp-block-list">
<li>SRP → Kod karmaşasını azaltır</li>



<li>OCP → Yeni özellik eklemeyi güvenli hâle getirir</li>



<li>LSP → Kalıtım kaynaklı hataları engeller</li>



<li>ISP → Sınıfları gereksiz bağımlılıklardan kurtarır</li>



<li>DIP → Test edilebilir, izole edilebilir bir yapı sağlar</li>
</ul>



<p class="wp-block-paragraph">Bu örneklerle proje kodlarınızı gözden geçirip daha sürdürülebilir bir mimari oluşturabilirsiniz.</p>



<h4 class="wp-block-heading"><strong>Mini Check-List: Projen SOLID mi?</strong></h4>



<p class="wp-block-paragraph">Bu örnekleri değerlendirirken kendi projenize şu soruları sorabilirsiniz: Bir sınıf tek bir işi mi yapıyor? Yeni bir kaynağı desteklemek için mevcut kodu değiştirmek zorunda kalıyor musunuz? Türeyen sınıflar beklenen davranışı bozuyor mu? Servisler gereksiz metodlara mı bağımlı? Birimi test etmek istediğinizde mock kullanabiliyor musunuz? Bu sorulara “hayır” cevabı verebildiğiniz her alan daha sürdürülebilir bir mimariye yaklaştığınız anlamına gelir.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://www.halildurmus.com/2026/03/08/gercek-crm-senaryolariyla-solid-prensipleri/">Gerçek CRM Senaryolarıyla SOLID Prensipleri</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2026/03/08/gercek-crm-senaryolariyla-solid-prensipleri/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>C#’ta Memory Management, GC Nasıl Çalışır?</title>
		<link>https://www.halildurmus.com/2026/02/17/cta-memory-management-gc-nasil-calisir/</link>
					<comments>https://www.halildurmus.com/2026/02/17/cta-memory-management-gc-nasil-calisir/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Tue, 17 Feb 2026 05:00:00 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[.NET Memory Management]]></category>
		<category><![CDATA[C# Performance Optimization]]></category>
		<category><![CDATA[Garbage Collector (GC)]]></category>
		<category><![CDATA[High Performance .NET]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=5211</guid>

					<description><![CDATA[<p>Kurumsal ve uzun süre çalışan (.NET Web API, Worker Service, CRM entegrasyonları gibi) uygulamalarda memory management, performans ve stabilite açısından kritik bir konudur. Bu yazıda .NET Garbage Collector (GC) mimarisini, nesil (Generation) mantığını, Large Object Heap’i, IDisposable desenini ve modern bellek dostu yapılar olan Span&#60;T> / Memory&#60;T> kullanımını okuyup analiz edilebilir bir seviyede ele alacağız. [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2026/02/17/cta-memory-management-gc-nasil-calisir/">C#’ta Memory Management, GC Nasıl Çalışır?</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Kurumsal ve uzun süre çalışan (.NET Web API, Worker Service, CRM entegrasyonları gibi) uygulamalarda <strong>memory management</strong>, performans ve stabilite açısından kritik bir konudur. Bu yazıda .NET Garbage Collector (GC) mimarisini, nesil (Generation) mantığını, Large Object Heap’i, <code>IDisposable</code> desenini ve modern bellek dostu yapılar olan <code>Span&lt;T></code> / <code>Memory&lt;T></code> kullanımını <strong>okuyup analiz edilebilir</strong> bir seviyede ele alacağız.</p>



<h4 class="wp-block-heading"><strong>1. Garbage Collector (GC) Nedir, Ne Yapar?</strong></h4>



<p class="wp-block-paragraph">.NET’te bellek yönetimi büyük ölçüde <strong>Garbage Collector</strong> tarafından otomatik olarak yapılır.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://www.halildurmus.com/wp-content/uploads/2025/12/Garbage_Collector-1024x683.png" alt="" class="wp-image-5217" srcset="https://www.halildurmus.com/wp-content/uploads/2025/12/Garbage_Collector-1024x683.png 1024w, https://www.halildurmus.com/wp-content/uploads/2025/12/Garbage_Collector-300x200.png 300w, https://www.halildurmus.com/wp-content/uploads/2025/12/Garbage_Collector-768x512.png 768w, https://www.halildurmus.com/wp-content/uploads/2025/12/Garbage_Collector-810x540.png 810w, https://www.halildurmus.com/wp-content/uploads/2025/12/Garbage_Collector-1140x760.png 1140w, https://www.halildurmus.com/wp-content/uploads/2025/12/Garbage_Collector.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



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



<p class="wp-block-paragraph">GC’nin temel görevleri:</p>



<ul class="wp-block-list">
<li>Heap üzerinde tahsis edilen nesneleri takip etmek</li>



<li>Artık erişilmeyen (unreachable) nesneleri temizlemek</li>



<li>Belleği <strong>compact</strong> ederek fragmentation’ı azaltmak</li>
</ul>



<p class="wp-block-paragraph">⚠️ Önemli: GC bir <em>memory leak önleyici</em> değildir. Yanlış referans yönetimi hâlâ bellek sızıntısına yol açabilir.</p>



<h4 class="wp-block-heading"><strong>2. Generation (Gen 0 – Gen 1 – Gen 2) Mantığı</strong></h4>



<p class="wp-block-paragraph">GC, performans için nesneleri <strong>yaşam sürelerine göre</strong> sınıflandırır.</p>



<h5 class="wp-block-heading">🔹 Gen 0</h5>



<ul class="wp-block-list">
<li>Yeni oluşturulan nesneler</li>



<li>Çok kısa ömürlüdür</li>



<li>En sık temizlenen nesildir</li>
</ul>



<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>var user = new User(); // Gen 0</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">var</span><span style="color: #F6F6F4"> user </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4">(); </span><span style="color: #7B7F8B">// Gen 0</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>



<h5 class="wp-block-heading">🔹 Gen 1</h5>



<ul class="wp-block-list">
<li>Gen 0’dan sağ çıkan nesneler</li>



<li>Ara geçiş nesilleri</li>
</ul>



<h5 class="wp-block-heading">🔹 Gen 2</h5>



<ul class="wp-block-list">
<li>Uzun ömürlü nesneler (cache, singleton, static referanslar)</li>



<li>Temizlemesi pahalıdır</li>
</ul>



<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>static readonly List&lt;string> _cache = new(); // Gen 2 adayı</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">static</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">readonly</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">List</span><span style="color: #F6F6F4">&lt;</span><span style="color: #F286C4">string</span><span style="color: #F6F6F4">&gt; _cache </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4">(); </span><span style="color: #7B7F8B">// Gen 2 adayı</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">📌 <strong>GC Kuralı:</strong></p>



<p class="wp-block-paragraph">Çoğu nesne genç ölür → Bu yüzden Gen 0 sık, Gen 2 nadir toplanır.</p>



<h4 class="wp-block-heading"><strong>3. Large Object Heap (LOH)</strong></h4>



<h5 class="wp-block-heading">LOH Nedir?</h5>



<ul class="wp-block-list">
<li><strong>85.000 byte</strong> üzerindeki nesneler LOH’a gider</li>



<li>Gen 2 ile birlikte toplanır</li>



<li>Varsayılan olarak <strong>compact edilmez</strong> (fragmentation riski)</li>
</ul>



<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>byte[] buffer = new byte&#91;100_000&#93;; // LOH</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">byte</span><span style="color: #F6F6F4">[] buffer </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">byte</span><span style="color: #F6F6F4">&#91;</span><span style="color: #BF9EEE">100_000</span><span style="color: #F6F6F4">&#93;; </span><span style="color: #7B7F8B">// LOH</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>



<h5 class="wp-block-heading">LOH Problemleri</h5>



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



<li>Uzun GC pause süreleri</li>
</ul>



<h4 class="wp-block-heading"><strong>4. IDisposable ve Finalizer Mantığı</strong></h4>



<h5 class="wp-block-heading">IDisposable Ne Zaman Gerekli?</h5>



<p class="wp-block-paragraph">Managed olmayan kaynaklar varsa:</p>



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



<li>DB connection</li>



<li>Stream</li>



<li>Socket</li>
</ul>



<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 FileLogger : IDisposable
{
private StreamWriter _writer;


public FileLogger(string path)
{
_writer = new StreamWriter(path);
}


public void Dispose()
{
_writer.Dispose();
}
}</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">FileLogger</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">IDisposable</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F286C4">private</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">StreamWriter</span><span style="color: #F6F6F4"> _writer;</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">FileLogger</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4">string</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">path</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">_writer </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">StreamWriter</span><span style="color: #F6F6F4">(path);</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">public</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Dispose</span><span style="color: #F6F6F4">()</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">_writer.</span><span style="color: #62E884">Dispose</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"><strong>using Statement</strong></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>using (var logger = new FileLogger("log.txt"))
{
logger.Log("Hello");
}</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">using</span><span style="color: #F6F6F4"> (</span><span style="color: #F286C4">var</span><span style="color: #F6F6F4"> logger </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">FileLogger</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">log.txt</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">))</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">logger.</span><span style="color: #62E884">Log</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">Hello</span><span style="color: #DEE492">&quot;</span><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>



<h4 class="wp-block-heading"><strong>5. Finalizer ve GC.SuppressFinalize</strong></h4>



<p class="wp-block-paragraph">Finalizer (~ClassName)</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>~FileLogger()
{
Dispose(false);
}</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">~</span><span style="color: #62E884">FileLogger</span><span style="color: #F6F6F4">()</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #62E884">Dispose</span><span style="color: #F6F6F4">(</span><span style="color: #BF9EEE">false</span><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>



<h5 class="wp-block-heading">Doğru Disposable Pattern</h5>



<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 ResourceHolder : IDisposable
{
  private bool _disposed;
  
  public void Dispose()
  {
    Dispose(true);
    GC.SuppressFinalize(this);
  }


  protected virtual void Dispose(bool disposing)
  {
    if (_disposed) return;
    if (disposing)
    {
      // managed resources
    }


    // unmanaged resources
    _disposed = true;
  }
}</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">ResourceHolder</span><span style="color: #F6F6F4"> : </span><span style="color: #97E1F1; font-style: italic">IDisposable</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">private</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">bool</span><span style="color: #F6F6F4"> _disposed;</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">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Dispose</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 style="color: #62E884">Dispose</span><span style="color: #F6F6F4">(</span><span style="color: #BF9EEE">true</span><span style="color: #F6F6F4">);</span></span>
<span class="line"><span style="color: #F6F6F4">    GC.</span><span style="color: #62E884">SuppressFinalize</span><span style="color: #F6F6F4">(</span><span style="color: #BF9EEE; font-style: italic">this</span><span style="color: #F6F6F4">);</span></span>
<span class="line"><span style="color: #F6F6F4">  }</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">protected</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">virtual</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Dispose</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4">bool</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">disposing</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 style="color: #F286C4">if</span><span style="color: #F6F6F4"> (_disposed) </span><span style="color: #F286C4">return</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">if</span><span style="color: #F6F6F4"> (disposing)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #7B7F8B">      // managed resources</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">    // unmanaged resources</span></span>
<span class="line"><span style="color: #F6F6F4">    _disposed </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">true</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">📌 <code>GC.SuppressFinalize</code> çağrılmazsa nesne <strong>iki kez</strong> GC sürecine girer.</p>



<h4 class="wp-block-heading"><strong>6. Span ve Memory / Modern Bellek Dostu Yapılar</strong></h4>



<h5 class="wp-block-heading">Neden Gerekli?</h5>



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



<li>High-performance senaryolar</li>



<li>Copy yerine slice mantığı</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h5 class="wp-block-heading">Span</h5>



<ul class="wp-block-list">
<li>Stack üzerinde çalışır</li>



<li>Heap allocation yapmaz</li>



<li>Async/await ile kullanılamaz</li>
</ul>



<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>Span&lt;int> numbers = stackalloc int&#91;5&#93;;
numbers&#91;0&#93; = 10;
void Process(Span&lt;byte> buffer)
{
  // slicing
  var header = buffer&#91;..4&#93;;
}</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: #97E1F1; font-style: italic">Span</span><span style="color: #F6F6F4">&lt;</span><span style="color: #F286C4">int</span><span style="color: #F6F6F4">&gt; numbers </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">stackalloc</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">int</span><span style="color: #F6F6F4">&#91;</span><span style="color: #BF9EEE">5</span><span style="color: #F6F6F4">&#93;;</span></span>
<span class="line"><span style="color: #F6F6F4">numbers&#91;</span><span style="color: #BF9EEE">0</span><span style="color: #F6F6F4">&#93; </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">10</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F286C4">void</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Process</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">Span</span><span style="color: #F6F6F4">&lt;</span><span style="color: #F286C4">byte</span><span style="color: #F6F6F4">&gt; </span><span style="color: #FFB86C; font-style: italic">buffer</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #7B7F8B">  // slicing</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">var</span><span style="color: #F6F6F4"> header </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> buffer&#91;</span><span style="color: #F286C4">..</span><span style="color: #BF9EEE">4</span><span style="color: #F6F6F4">&#93;;</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>



<h5 class="wp-block-heading">Memory</h5>



<ul class="wp-block-list">
<li>Heap üzerinde çalışır</li>



<li>Async uyumludur</li>



<li>Daha güvenli ama biraz daha maliyetlidir</li>
</ul>



<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>Memory&lt;byte> memory = new byte&#91;1024&#93;;
await stream.ReadAsync(memory);</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: #97E1F1; font-style: italic">Memory</span><span style="color: #F6F6F4">&lt;</span><span style="color: #F286C4">byte</span><span style="color: #F6F6F4">&gt; memory </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">new</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">byte</span><span style="color: #F6F6F4">&#91;</span><span style="color: #BF9EEE">1024</span><span style="color: #F6F6F4">&#93;;</span></span>
<span class="line"><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> stream.</span><span style="color: #62E884">ReadAsync</span><span style="color: #F6F6F4">(memory);</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>



<h5 class="wp-block-heading"></h5>



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



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="682" src="https://www.halildurmus.com/wp-content/uploads/2025/12/span_memory-1024x682.png" alt="" class="wp-image-5219" srcset="https://www.halildurmus.com/wp-content/uploads/2025/12/span_memory-1024x682.png 1024w, https://www.halildurmus.com/wp-content/uploads/2025/12/span_memory-300x200.png 300w, https://www.halildurmus.com/wp-content/uploads/2025/12/span_memory-768x512.png 768w, https://www.halildurmus.com/wp-content/uploads/2025/12/span_memory-810x540.png 810w, https://www.halildurmus.com/wp-content/uploads/2025/12/span_memory-1140x760.png 1140w, https://www.halildurmus.com/wp-content/uploads/2025/12/span_memory.png 1400w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



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



<h5 class="wp-block-heading">Span vs Memory</h5>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><th>Özellik</th><th>Span</th><th>Memory</th></tr><tr><td>Heap Allocation</td><td>❌</td><td>✅</td></tr><tr><td>Async Kullanım</td><td>❌</td><td>✅</td></tr><tr><td>Performans</td><td>⭐⭐⭐⭐</td><td>⭐⭐⭐</td></tr></tbody></table></figure>



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



<h4 class="wp-block-heading"><strong>7. Gerçek Hayat Senaryosu (Web API)</strong></h4>



<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 async Task&lt;IActionResult> Upload(IFormFile file)
{
  using var stream = file.OpenReadStream();
  byte[] buffer = ArrayPool&lt;byte>.Shared.Rent(81920);

  try
  {
    int read;
    while ((read = await stream.ReadAsync(buffer)) > 0)
    {
      // process
    }
  }
  finally
  {
    ArrayPool&lt;byte>.Shared.Return(buffer);
  }
  return Ok();
}</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">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">IActionResult</span><span style="color: #F6F6F4">&gt; </span><span style="color: #62E884">Upload</span><span style="color: #F6F6F4">(</span><span style="color: #97E1F1; font-style: italic">IFormFile</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">file</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 style="color: #F286C4">using</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">var</span><span style="color: #F6F6F4"> stream </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> file.</span><span style="color: #62E884">OpenReadStream</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">byte</span><span style="color: #F6F6F4">[] buffer </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> ArrayPool&lt;</span><span style="color: #F286C4">byte</span><span style="color: #F6F6F4">&gt;.Shared.</span><span style="color: #62E884">Rent</span><span style="color: #F6F6F4">(</span><span style="color: #BF9EEE">81920</span><span style="color: #F6F6F4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">try</span></span>
<span class="line"><span style="color: #F6F6F4">  {</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">int</span><span style="color: #F6F6F4"> read;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">while</span><span style="color: #F6F6F4"> ((read </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> stream.</span><span style="color: #62E884">ReadAsync</span><span style="color: #F6F6F4">(buffer)) </span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #7B7F8B">      // process</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">  }</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">finally</span></span>
<span class="line"><span style="color: #F6F6F4">  {</span></span>
<span class="line"><span style="color: #F6F6F4">    ArrayPool&lt;</span><span style="color: #F286C4">byte</span><span style="color: #F6F6F4">&gt;.Shared.</span><span style="color: #62E884">Return</span><span style="color: #F6F6F4">(buffer);</span></span>
<span class="line"><span style="color: #F6F6F4">  }</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">return</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">Ok</span><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 yapı:</p>



<ul class="wp-block-list">
<li>LOH kullanımını azaltır</li>



<li>GC baskısını düşürür</li>
</ul>



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



<h4 class="wp-block-heading"><strong>8. Özet ve Best Practices</strong></h4>



<ul class="wp-block-list">
<li> Kısa ömürlü nesneleri Gen 0’da tut</li>



<li> LOH allocation’larından kaçın</li>



<li> IDisposable kullanmayı ihmal etme</li>



<li> Finalizer’ı zorunlu değilse yazma</li>



<li> High-performance alanlarda <code>Span&lt;T></code> ve <code>ArrayPool&lt;T></code> kullan</li>
</ul>



<p class="wp-block-paragraph">GC’yi &#8220;nasıl çalıştığını bilen&#8221; bir geliştirici olmak, kurumsal projelerde seni bir adım öne taşır. Özellikle yüksek trafikli CRM, entegrasyon ve API projelerinde doğru memory yönetimi, performans sorunlarının %80’ini daha oluşmadan engeller.</p>
<p>The post <a href="https://www.halildurmus.com/2026/02/17/cta-memory-management-gc-nasil-calisir/">C#’ta Memory Management, GC Nasıl Çalışır?</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2026/02/17/cta-memory-management-gc-nasil-calisir/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>.NET Async/Await: Deadlock, Performans ve Modern Teknikler</title>
		<link>https://www.halildurmus.com/2026/01/12/net-async-await-deadlock-performans-ve-modern-teknikler/</link>
					<comments>https://www.halildurmus.com/2026/01/12/net-async-await-deadlock-performans-ve-modern-teknikler/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Mon, 12 Jan 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Asenkron]]></category>
		<category><![CDATA[BeginInvoke]]></category>
		<category><![CDATA[Delegate]]></category>
		<category><![CDATA[Thread]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=5173</guid>

					<description><![CDATA[<p>.NET dünyasında async/await artık her projenin bir parçası. Ancak bu kadar yaygın olmasına rağmen hâlâ yanlış kullanıldığı durumlar var. Bu hatalar gereksiz karmaşa yaratabiliyor ve performans sorunlarına yol açabiliyor. Bu yazıda günlük geliştirme hayatında sık görülen senaryolara odaklanacağım. ConfigureAwait kullanımının etkilerini ele alacağım. Async deadlock örneklerini açıklayacağım. IO-bound ve CPU-bound ayrımını netleştireceğim. Async LINQ pattern’lerinden [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2026/01/12/net-async-await-deadlock-performans-ve-modern-teknikler/">.NET Async/Await: Deadlock, Performans ve Modern Teknikler</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">.NET dünyasında async/await artık her projenin bir parçası. Ancak bu kadar yaygın olmasına rağmen hâlâ yanlış kullanıldığı durumlar var. Bu hatalar gereksiz karmaşa yaratabiliyor ve performans sorunlarına yol açabiliyor. Bu yazıda günlük geliştirme hayatında sık görülen senaryolara odaklanacağım. ConfigureAwait kullanımının etkilerini ele alacağım. Async deadlock örneklerini açıklayacağım. IO-bound ve CPU-bound ayrımını netleştireceğim. Async LINQ pattern’lerinden bahsedeceğim. Son olarak BackgroundService içinde asenkron iş yürütmeyi inceleyeceğim. Amacım tüm bu konulara dair pratik ve anlaşılır bir perspektif sunmak.</p>



<h4 class="wp-block-heading">Async/Await’in Temeli: IO-bound ile CPU-bound Ayrımını Anlamak</h4>



<p class="wp-block-paragraph">Asenkron programlama denince birçok kişinin aklına hızlanma geliyor. Ancak gerçekte async kod çoğu zaman hız kazandırmaz. Asıl amaç, tıkanmayan thread’leri serbest bırakmaktır. IO-bound işlemler buna iyi bir örnektir. Örneğin ağ istekleri, dosya okumaları veya veritabanı çağrıları bekleme sırasında thread’i meşgul etmez. Bu nedenle await tam bu noktada devreye girer.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.halildurmus.com/wp-content/uploads/2025/12/hd_Async_Await.png" alt="" class="wp-image-5179" srcset="https://www.halildurmus.com/wp-content/uploads/2025/12/hd_Async_Await.png 1024w, https://www.halildurmus.com/wp-content/uploads/2025/12/hd_Async_Await-300x225.png 300w, https://www.halildurmus.com/wp-content/uploads/2025/12/hd_Async_Await-768x576.png 768w, https://www.halildurmus.com/wp-content/uploads/2025/12/hd_Async_Await-810x608.png 810w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



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



<p class="wp-block-paragraph">Diğer yandan CPU-bound işlemler farklıdır. Uzun hesaplamalar, image processing veya kriptografik operasyonlar tamamen CPU gücüne ihtiyaç duyar. Bu durumda async tek başına fayda sağlamaz. İşlemi Task.Run() ile havuza atmak gerekir. Böylece UI veya request thread’i boş kalır. Bu fark doğru anlaşılmazsa yanlış async kullanımı ortaya çıkar. Sonuç olarak gereksiz overhead ve hatalı mimari kararlar oluşur.</p>



<h4 class="wp-block-heading">Async/Await ve Deadlock Gerçekleri: ConfigureAwait’in Rolü</h4>



<p class="wp-block-paragraph">En klasik deadlock örneği:</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>var result = GetDataAsync().Result;</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">var</span><span style="color: #F6F6F4"> result </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">GetDataAsync</span><span style="color: #F6F6F4">().Result;</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"><br>veya</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>var result = GetDataAsync().GetAwaiter().GetResult();</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">var</span><span style="color: #F6F6F4"> result </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">GetDataAsync</span><span style="color: #F6F6F4">().</span><span style="color: #62E884">GetAwaiter</span><span style="color: #F6F6F4">().</span><span style="color: #62E884">GetResult</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">Eğer çağrıyı yapan thread (özellikle UI thread veya ASP.NET’in eski SynchronizationContext’leri) senkron bekliyorsa ve async metot result dönerken bağlamına dönmeye çalışıyorsa deadlock oluşur. Bunu önlemenin en güçlü yolu ise hepimizin bildiği ama çoğu zaman “ihmal ettiği” küçük bir detaydır: <code>ConfigureAwait(false)</code>.</p>



<p class="wp-block-paragraph">Bir kütüphane, SDK veya utility sınıfı yazarken çoğunlukla <strong>çağıranın context’ine dönmeye ihtiyaç yoktur</strong>. Bu nedenle tüm await’lerinize şu eklemeyi yapmanız sizi birçok potansiyel sorunlardan kurtarı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>await SomeIoOperation().ConfigureAwait(false);</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"> </span><span style="color: #62E884">SomeIoOperation</span><span style="color: #F6F6F4">().</span><span style="color: #62E884">ConfigureAwait</span><span style="color: #F6F6F4">(</span><span style="color: #BF9EEE">false</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">Böylece kodunuz UI veya request context’i gibi bir “tekil thread” geri dönme zorunluluğu olan ortamlara takılmaz. Modern .NET’te ASP.NET Core zaten SynchronizationContext kullanmadığı için deadlock riski azalmış olsa da, library geliştiricileri için ConfigureAwait hâlâ altın değerinde.</p>



<h4 class="wp-block-heading">Async LINQ Pattern’leri: En Çok Yanlış Anlaşılan Konulardan Biri</h4>



<p class="wp-block-paragraph">LINQ doğası gereği senkron bir API’dir ve async pattern’lerle birebir çalışması çoğu zaman beklenildiği kadar kolay değildir. Örneğin, şu kullanım hatalı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>var results = items.Select(async item => await DoWorkAsync(item)).ToList();</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">var</span><span style="color: #F6F6F4"> results </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> items.</span><span style="color: #62E884">Select</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4">async</span><span style="color: #F6F6F4"> </span><span style="color: #FFB86C; font-style: italic">item</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">DoWorkAsync</span><span style="color: #F6F6F4">(item)).</span><span style="color: #62E884">ToList</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">Bu noktada <code>results</code> bir <code>List&lt;Task&lt;T>></code> döner, işlerin tamamlanıp tamamlanmadığı belirsizdir. Doğrusu ise genellikle iki aşamalı bir pattern izlemektir:</p>



<p class="wp-block-paragraph"></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>var tasks = items.Select(item => DoWorkAsync(item));
var results = await Task.WhenAll(tasks);</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">var</span><span style="color: #F6F6F4"> tasks </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> items.</span><span style="color: #62E884">Select</span><span style="color: #F6F6F4">(</span><span style="color: #FFB86C; font-style: italic">item</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">DoWorkAsync</span><span style="color: #F6F6F4">(item));</span></span>
<span class="line"><span style="color: #F286C4">var</span><span style="color: #F6F6F4"> results </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> Task.</span><span style="color: #62E884">WhenAll</span><span style="color: #F6F6F4">(tasks);</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">Hem kontrol sizde olur hem de paralel yürütme avantajı kazanırsınız.<br>Aynı zamanda EF Core gibi async query destekleyen ortamlarda LINQ ifadelerinin tamamı asenkron olmayabilir. Sorgunun en son <code>ToListAsync()</code> veya <code>FirstOrDefaultAsync()</code> vb. çağrısına kadar <em>deferred execution</em> devam eder. Bu fark, özellikle performans odaklı API’lerde kritik bir noktadır.</p>



<h4 class="wp-block-heading">BackgroundService ile Async İş Akışları</h4>



<p class="wp-block-paragraph"><code>BackgroundService</code>, .NET uygulamalarında arka plan işler için oldukça ideal bir yapı sunar. Ancak async yapılar burada da dikkat gerektirir. Döngü tabanlı bir servis:</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>protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCancellationRequested)
    {
        await ProcessJobsAsync(stoppingToken);
        await Task.Delay(TimeSpan.FromSeconds(10), stoppingToken);
    }
}</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">protected</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">override</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"> </span><span style="color: #62E884">ExecuteAsync</span><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">stoppingToken</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 style="color: #F286C4">while</span><span style="color: #F6F6F4"> (</span><span style="color: #F286C4">!</span><span style="color: #F6F6F4">stoppingToken.IsCancellationRequested)</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">ProcessJobsAsync</span><span style="color: #F6F6F4">(stoppingToken);</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> Task.</span><span style="color: #62E884">Delay</span><span style="color: #F6F6F4">(TimeSpan.</span><span style="color: #62E884">FromSeconds</span><span style="color: #F6F6F4">(</span><span style="color: #BF9EEE">10</span><span style="color: #F6F6F4">), stoppingToken);</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">Burada dikkat edilmesi gereken iki kritik nokta vardır:<br>(1) CancellationToken’ın tüm beklemelerde ve IO-bound çağrılarında gerçekten kullanılması.<br>(2) Servisin kesinlikle fire-and-forget iş döndürmemesi; async void yerine async Task pattern’ine sıkı sıkıya bağlı kalması.</p>



<p class="wp-block-paragraph">Ayrıca BackgroundService içerisindeki exception’ların swallow edilmesi çok yaygın bir hatadır. Servis çöker, sistem hiçbir şey söylemeden çalışmayı durdurur. Bu nedenle try/catch ile loglama veya global handler kullanımı bir zorunluluktur.</p>



<h4 class="wp-block-heading">Gerçek Hayatta Async/Await Nasıl Tasarlanmalı?</h4>



<p class="wp-block-paragraph">Bir projede async mimari tasarlanırken kritik olan şey, async’i her yere enjekte etmek değil; <em>ihtiyaç duyulan yere doğru şekilde yerleştirmektir</em>. Servis metotları IO ağırlıklı ise async kullanmak doğru; ancak her fonksiyonu async yapmak, gereksiz Task objeleri üretmek ve thread havuzunu şişirmek, performansı artırmak yerine düşürebilir. Bu yüzden en iyi pratik her zaman hepimizin bildiği ama bazen uygulamaktan kaçındığı küçük bir prensiptir: <strong>Async all the way</strong>.</p>



<p class="wp-block-paragraph">Yani bir metot async ise çağıran da async, onun çağıranı da async olmalıdır. Uçta bir UI veya Controller’a gelindiğinde “await” ile işlem sonlandırılır.</p>



<h4 class="wp-block-heading">Sonuç: Async/Await Sadece Bir Söz Dizimi Değil, Bir Mimaridir</h4>



<p class="wp-block-paragraph">.NET’te async/await, daha hızlı bir uygulama yazmak için değil; daha esnek, ölçeklenebilir ve thread pool’u verimli kullanan bir mimari inşa etmek içindir. Gerçek dünyada kullanılan asenkron kodlar; ConfigureAwait kullanımından arka plan servislerinde exception yönetimine, async LINQ pattern’lerinden IO-bound vs CPU-bound farkına kadar birçok noktada özen gerektirir.</p>



<p class="wp-block-paragraph">Doğru kullanıldığında async/await hem kodunuzu daha temiz hale getirir hem de yüksek trafik altında dahi uygulamanızın daha stabil çalışmasını sağlar. Yanlış kullanıldığında ise fark edilmesi en zor performans ve concurrency problemlerinin kaynağı olabilir.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://www.halildurmus.com/2026/01/12/net-async-await-deadlock-performans-ve-modern-teknikler/">.NET Async/Await: Deadlock, Performans ve Modern Teknikler</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2026/01/12/net-async-await-deadlock-performans-ve-modern-teknikler/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Code Review: Yazılımda Kalite ve İşbirliğinin Anahtarı</title>
		<link>https://www.halildurmus.com/2025/09/29/code-review-yazilimda-kalite-ve-isbirliginin-anahtari/</link>
					<comments>https://www.halildurmus.com/2025/09/29/code-review-yazilimda-kalite-ve-isbirliginin-anahtari/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Mon, 29 Sep 2025 06:00:00 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[#Kod Kalitesi]]></category>
		<category><![CDATA[#Sürdürülebilir Kod]]></category>
		<category><![CDATA[#Tasarım Prensipleri]]></category>
		<category><![CDATA[#Yazılım Geliştirme]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=5141</guid>

					<description><![CDATA[<p>Code review, bir geliştirici tarafından yazılan kodun başka geliştiriciler tarafından incelenmesi ve değerlendirilmesi sürecidir. Bu inceleme süreci, kodun kalitesini artırmayı, hataları önlemeyi ve ekip içinde bilgi paylaşımını teşvik etmeyi amaçlar. Code review, yazılım geliştirme döngüsünün ayrılmaz bir parçasıdır ve genellikle versiyon kontrol sistemleri ile entegre bir şekilde yürütülür. Git gibi popüler araçlarda, pull request veya [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2025/09/29/code-review-yazilimda-kalite-ve-isbirliginin-anahtari/">Code Review: Yazılımda Kalite ve İşbirliğinin Anahtarı</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Code review, bir geliştirici tarafından yazılan kodun başka geliştiriciler tarafından incelenmesi ve değerlendirilmesi sürecidir. Bu inceleme süreci, kodun kalitesini artırmayı, hataları önlemeyi ve ekip içinde bilgi paylaşımını teşvik etmeyi amaçlar.</p>



<p class="wp-block-paragraph">Code review, yazılım geliştirme döngüsünün ayrılmaz bir parçasıdır ve genellikle versiyon kontrol sistemleri ile entegre bir şekilde yürütülür. Git gibi popüler araçlarda, pull request veya merge request mekanizmaları üzerinden uygulanır.</p>



<h4 class="wp-block-heading">Code Review&#8217;un Amaçları</h4>



<ol start="1" class="wp-block-list">
<li><strong>Kod Kalitesini Artırma:</strong>
<ul class="wp-block-list">
<li>Kodun okunabilirliği, sürdürülebilirliği ve standardizasyona uygunluğu kontrol edilir.</li>



<li>Kodun tasarım prensiplerine (SOLID, DRY, KISS vb.) uygun olup olmadığı değerlendirilir.</li>
</ul>
</li>



<li><strong>Hataları Önleme:</strong>
<ul class="wp-block-list">
<li>Koddaki potansiyel hatalar, performans sorunları veya çakışma problemleri çözülmeden önce tespit edilir.</li>



<li>Güvenlik açıkları veya eksiklikler erken aşamada belirlenir.</li>
</ul>
</li>



<li><strong>Ekip İçi Bilgi Paylaşımı:</strong>
<ul class="wp-block-list">
<li>Ekip üyeleri arasında bilgi paylaşımı ve işbirliği teşvik edilir.</li>



<li>Yeni ekip üyeleri, projeye daha hızlı adapte olur ve mevcut standartları öğrenir.</li>
</ul>
</li>



<li><strong>Kod Standartlarını Koruma:</strong>
<ul class="wp-block-list">
<li>Projede belirlenen kodlama standartlarına uyulması sağlanır.</li>



<li>Tutarlı bir kod tabanı oluşturulur.</li>
</ul>
</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="534" src="https://www.halildurmus.com/wp-content/uploads/2025/01/HdCode-Review.jpg" alt="" class="wp-image-5142" srcset="https://www.halildurmus.com/wp-content/uploads/2025/01/HdCode-Review.jpg 800w, https://www.halildurmus.com/wp-content/uploads/2025/01/HdCode-Review-300x200.jpg 300w, https://www.halildurmus.com/wp-content/uploads/2025/01/HdCode-Review-768x513.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



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



<h4 class="wp-block-heading">Code Review Neden Yapılır?</h4>



<p class="wp-block-paragraph"><strong>1. Hata Yakalama ve Güvenlik</strong><br>Code review, hataların erken aşamada tespit edilmesine yardımcı olur. Bu, hatanın daha sonra ortaya çıkması durumunda artacak maliyeti önler. Güvenlik açıklarının erken tespiti ise sistemin siber tehditlere karşı dayanıklılığını artırır.</p>



<p class="wp-block-paragraph"><strong>2. Sürdürülebilirlik</strong><br>Okunabilir ve iyi tasarlanmış kod, uzun vadede projeyi sürdürülebilir kılar. Kod incelemeleri, geliştiricilerin kodu daha iyi yazmasını sağlar.</p>



<p class="wp-block-paragraph"><strong>3. Ekip Dinamikleri ve Gelişim</strong><br>Bir ekip içinde yapılan kod incelemeleri, ortak bir kodlama dili geliştirilmesine yardımcı olur. Aynı zamanda, geliştiriciler birbirlerinden öğrenme fırsatı bulurlar.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="533" src="https://www.halildurmus.com/wp-content/uploads/2025/01/Code-Review.jpg" alt="" class="wp-image-5143" srcset="https://www.halildurmus.com/wp-content/uploads/2025/01/Code-Review.jpg 800w, https://www.halildurmus.com/wp-content/uploads/2025/01/Code-Review-300x200.jpg 300w, https://www.halildurmus.com/wp-content/uploads/2025/01/Code-Review-768x512.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



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



<h4 class="wp-block-heading">Code Review Nasıl Yapılır?</h4>



<ol start="1" class="wp-block-list">
<li><strong>Kodun Anlaşılabilirliğini Kontrol Etmek:</strong>
<ul class="wp-block-list">
<li>Kodun okunabilirliğini değerlendirin. Karmaşık yapıların sadeleştirilmesini önerin.</li>
</ul>
</li>



<li><strong>Hata ve Eksiklikleri Belirlemek:</strong>
<ul class="wp-block-list">
<li>Kodun test senaryolarının yeterli olup olmadığını kontrol edin.</li>



<li>Kenar durumların uygun bir şekilde ele alınıp alınmadığını inceleyin.</li>
</ul>
</li>



<li><strong>Performans ve Optimizasyon:</strong>
<ul class="wp-block-list">
<li>Kodun performansını etkileyecek şekilde iyileştirilebilecek alanları bulun.</li>
</ul>
</li>



<li><strong>Standartlara Uyumluluk:</strong>
<ul class="wp-block-list">
<li>Kodlama standartlarına uygunluk denetimi yapın.</li>
</ul>
</li>



<li><strong>Yapısal Tutarlılık:</strong>
<ul class="wp-block-list">
<li>Değişikliklerin projenin genel yapısıyla uyumlu olmasına dikkat edin.</li>
</ul>
</li>
</ol>



<h4 class="wp-block-heading">Code Review Araçları</h4>



<ul class="wp-block-list">
<li><strong>GitHub/GitLab Pull Requests:</strong> Kod incelemeleri için yaygın olarak kullanılır.</li>



<li><strong>Crucible:</strong> Atlassian&#8217;ın profesyonel bir kod inceleme aracıdır.</li>



<li><strong>Phabricator:</strong> Facebook tarafından geliştirilmiş bir kod inceleme platformudur.</li>



<li><strong>SonarQube:</strong> Kod kalitesini otomatik olarak analiz eden bir araçtır.</li>
</ul>



<p class="wp-block-paragraph">Code review, bir yazılım geliştirme ekibinin hem bireysel hem de ekip olarak kaliteyi ve verimliliği artırmasını sağlayan kritik bir süreçtir. Doğru yapılandığında, yalnızca hataları tespit etmekle kalmaz, aynı zamanda daha iyi bir kodlama kültürü oluşturur ve ekip içindeki bilgi birikimini artırır. Bu nedenle, yazılımcıların code review sürecine aktif olarak katılmaları ve bu pratikten maksimum faydayı sağlamaları önemlidir.</p>



<p class="wp-block-paragraph">Kaynakça: <strong><a href="https://smartbear.com/learn/code-review/what-is-code-review/">Smartbear</a></strong>, <a href="https://www.sonarsource.com/learn/code-review/"><strong>Sonarsource</strong></a></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://www.halildurmus.com/2025/09/29/code-review-yazilimda-kalite-ve-isbirliginin-anahtari/">Code Review: Yazılımda Kalite ve İşbirliğinin Anahtarı</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2025/09/29/code-review-yazilimda-kalite-ve-isbirliginin-anahtari/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Luhn Algoritması</title>
		<link>https://www.halildurmus.com/2025/08/29/luhn-algoritmasi/</link>
					<comments>https://www.halildurmus.com/2025/08/29/luhn-algoritmasi/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Fri, 29 Aug 2025 05:00:00 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Algoritma]]></category>
		<category><![CDATA[KrediKartıDoğrulama]]></category>
		<category><![CDATA[VeriDoğrulama]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=5148</guid>

					<description><![CDATA[<p>Luhn Algoritması, IBM mühendisi Hans Peter Luhn tarafından 1954 yılında geliştirilmiş bir doğrulama algoritmasıdır. Algoritma, hızlı ve basit bir şekilde bir dizi sayının doğruluğunu kontrol etmeyi amaçlar. Günümüzde, özellikle kredi kartı ve mobil cihaz IMEI numaralarının doğruluğunu sağlamak için yaygın olarak kullanılır. Matematiksel temellere dayanan bu yaklaşım, kullanıcı hatalarını önlemede etkili bir araçtır ve birçok [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2025/08/29/luhn-algoritmasi/">Luhn Algoritması</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Luhn Algoritması, IBM mühendisi Hans Peter Luhn tarafından 1954 yılında geliştirilmiş bir doğrulama algoritmasıdır. Algoritma, hızlı ve basit bir şekilde bir dizi sayının doğruluğunu kontrol etmeyi amaçlar. Günümüzde, özellikle kredi kartı ve mobil cihaz IMEI numaralarının doğruluğunu sağlamak için yaygın olarak kullanılır. Matematiksel temellere dayanan bu yaklaşım, kullanıcı hatalarını önlemede etkili bir araçtır ve birçok sektörde veri doğruluğunu artırmak için tercih edilmektedir.</p>



<p class="wp-block-paragraph">Luhn Algoritması, düşük işlem maliyeti ve basit kullanımıyla sistem performansını düşürmeden veri doğrulama süreçlerine entegre edilebilir. Güvenlik odaklı bir algoritma olmadığı için, sahtecilik önleme gibi durumlarda tek başına yeterli değildir. Bu yazıda, algoritmanın çalışma prensibini, nasıl çalıştığını, bir örnekle nasıl kullanıldığını ve avantajları ve dezavantajlarını ele alacağız.</p>



<h4 class="wp-block-heading">Luhn Algoritmasının Çalışma Prensibi</h4>



<p class="wp-block-paragraph">Luhn Algoritması, bir dizi sayının (genellikle bir numaranın) doğru olup olmadığını kontrol etmek için tasarlanmıştır. Bu algoritma, şu adımları takip eder:</p>



<ol start="1" class="wp-block-list">
<li><strong>Adım 1: Sayı Dizisinin Hazırlanması</strong>
<ul class="wp-block-list">
<li>Doğrulama yapılacak sayılar sağdan sola doğru değerlendirilir.</li>



<li>İlk sayı (en sağdaki) kontrol basamağı olarak ayrılır.</li>
</ul>
</li>



<li><strong>Adım 2: Her İkinci Sayıyı Çiftleme</strong>
<ul class="wp-block-list">
<li>Kontrol basamağı hariç diğer tüm sayılar sırayla alınır.</li>



<li>Sağdan sola doğru her ikinci sayı ikiyle çarpılır.</li>
</ul>
</li>



<li><strong>Adım 3: Çarpım Sonuçlarının Toplanması</strong>
<ul class="wp-block-list">
<li>İkiyle çarpılan sayılarda sonuç tek basamaklıysa aynen alınır; iki basamaklıysa basamaklar toplanır.</li>
</ul>
</li>



<li><strong>Adım 4: Tüm Sayıların Toplanması</strong>
<ul class="wp-block-list">
<li>Çiftleme sonrası elde edilen sayılar ve çiftlenmeyen diğer sayılar toplanır.</li>
</ul>
</li>



<li><strong>Adım 5: Modulo İşlemi ile Doğrulama</strong>
<ul class="wp-block-list">
<li>Toplamın 10’a bölünmesi sonucu kalan 0 ise numara geçerli sayılır.</li>
</ul>
</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h5 class="wp-block-heading">Örnek: Kredi Kartı Numarası Doğrulama</h5>



<p class="wp-block-paragraph">Bir kredi kartı numarasının doğruluğunu kontrol etmek için Luhn Algoritmasını uygulayalım. Numara: <strong>4539 1488 0343 6467</strong></p>



<ol start="1" class="wp-block-list">
<li><strong>Kontrol Basamağını Ayırma</strong>
<ul class="wp-block-list">
<li>Kontrol basamağı: 7</li>



<li>Geri kalan: 4539 1488 0343 646</li>
</ul>
</li>



<li><strong>Her İkinci Sayıyı Çiftleme</strong>
<ul class="wp-block-list">
<li>Sağdan sola: 6, 4, 3, 6, 8, 4, 9, 5</li>



<li>Çiftlenenler: 6×2=12, 4×2=8, 3×2=6, 6×2=12, 8×2=16, 4×2=8, 9×2=18, 5×2=10</li>



<li>Basamakları Toplama: (1+2) + 8 + 6 + (1+2) + (1+6) + 8 + (1+8) + (1+0) = 34</li>
</ul>
</li>



<li><strong>Çiftlenmeyen Sayılar ve Toplam</strong>
<ul class="wp-block-list">
<li>Çiftlenmeyenler: 7, 3, 8, 4, 3, 9, 5</li>



<li>Toplam: 7 + 3 + 8 + 4 + 3 + 9 + 5 = 39</li>
</ul>
</li>



<li><strong>Toplam</strong>
<ul class="wp-block-list">
<li>34 + 39 = 73</li>
</ul>
</li>



<li><strong>Doğrulama</strong>
<ul class="wp-block-list">
<li>73 mod 10 = 3 ≠ 0, bu numara geçerli değildir.</li>
</ul>
</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers" data-code-block-pro-font-family="" style="font-size:.875rem;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#d8dee933" stroke="#d8dee94d" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#d8dee933" stroke="#d8dee94d" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#d8dee933" stroke="#d8dee94d" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;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>// C# program to implement
// Luhn algorithm
using System;
 
class GFG {
     
// Returns true if given 
// card number is valid
static bool checkLuhn(String cardNo)
{
    int nDigits = cardNo.Length;
 
    int nSum = 0;
    bool isSecond = false;
    for (int i = nDigits - 1; i >= 0; i--) 
    {
 
         int d = cardNo&#91;i&#93; - '0';
 
        if (isSecond == true)
            d = d * 2;
 
        // We add two digits to handle
        // cases that make two digits 
        // after doubling
        nSum += d / 10;
        nSum += d % 10;
 
        isSecond = !isSecond;
    }
    return (nSum % 10 == 0);
}
 
    // Driver code
    static public void Main()
    {
        String cardNo = "79927398713";
        if (checkLuhn(cardNo))
            Console.WriteLine("This is a valid card");
        else
            Console.WriteLine("This is not a valid card");
     
    }
}
 </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 nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">// C# program to implement</span></span>
<span class="line"><span style="color: #616E88">// Luhn algorithm</span></span>
<span class="line"><span style="color: #81A1C1">using</span><span style="color: #D8DEE9FF"> System</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #81A1C1">class</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">GFG</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">     </span></span>
<span class="line"><span style="color: #616E88">// Returns true if given </span></span>
<span class="line"><span style="color: #616E88">// card number is valid</span></span>
<span class="line"><span style="color: #81A1C1">static</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">bool</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">checkLuhn</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">String cardNo</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">int</span><span style="color: #D8DEE9FF"> nDigits </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">cardNo</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Length</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">int</span><span style="color: #D8DEE9FF"> nSum </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">bool</span><span style="color: #D8DEE9FF"> isSecond </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">false;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">int</span><span style="color: #D8DEE9FF"> i </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nDigits</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&gt;=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #81A1C1">--</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF">         </span><span style="color: #81A1C1">int</span><span style="color: #D8DEE9FF"> d </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">cardNo</span><span style="color: #ECEFF4">&#91;</span><span style="color: #D8DEE9">i</span><span style="color: #ECEFF4">&#93;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">0</span><span style="color: #ECEFF4">&#39;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">isSecond</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">==</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">true</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #D8DEE9">d</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">d</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">2</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// We add two digits to handle</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// cases that make two digits </span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// after doubling</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">nSum</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">d</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">nSum</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">d</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">%</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">isSecond</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!</span><span style="color: #D8DEE9">isSecond</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">nSum</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">%</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">==</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// Driver code</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">static</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">public</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">Main</span><span style="color: #ECEFF4">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        String cardNo </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">79927398713</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #88C0D0">checkLuhn</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">cardNo</span><span style="color: #ECEFF4">))</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #D8DEE9">Console</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">WriteLine</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">This is a valid card</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">else</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #D8DEE9">Console</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">WriteLine</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">This is not a valid card</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">     </span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span></code></pre><span style="display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative">C#</span></div>



<p class="wp-block-paragraph">Çıktı:</p>



<p class="has-background wp-block-paragraph" style="background-color:#f3f1f1">This is a valid card</p>



<p class="wp-block-paragraph">Luhn algoritması, tek basamaklı hataların yanı sıra, bitişik basamaklardaki hemen hemen tüm transpozisyonları da tespit eder.&nbsp;</p>



<h4 class="wp-block-heading">Kullanım Alanları</h4>



<p class="wp-block-paragraph">Luhn Algoritması aşağıdaki alanlarda yaygın olarak kullanılır:</p>



<ul class="wp-block-list">
<li><strong>Kredi Kartı ve Banka Kartları:</strong> Kart numaralarının doğruluğunu kontrol etmek için.</li>



<li><strong>IMEI Numaraları:</strong> Mobil cihazların uluslararası kimlik doğrulaması için.</li>



<li><strong>Sosyal Güvenlik Numaraları:</strong> Bazı ülkelerde kimlik numaralarının doğruluğunu sağlamak için.</li>



<li><strong>Online Ödeme Sistemleri:</strong> Hatalı numara girişlerini önlemek için.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="750" src="https://www.halildurmus.com/wp-content/uploads/2025/01/luhn-Algoritmasi-kredi-karti.jpg" alt="" class="wp-image-5152" srcset="https://www.halildurmus.com/wp-content/uploads/2025/01/luhn-Algoritmasi-kredi-karti.jpg 750w, https://www.halildurmus.com/wp-content/uploads/2025/01/luhn-Algoritmasi-kredi-karti-300x300.jpg 300w, https://www.halildurmus.com/wp-content/uploads/2025/01/luhn-Algoritmasi-kredi-karti-150x150.jpg 150w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



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



<h4 class="wp-block-heading">Avantajları</h4>



<ul class="wp-block-list">
<li><strong>Basitlik:</strong> Algoritma kolayca anlaşılır ve uygulanabilir.</li>



<li><strong>Hız:</strong> Doğrulama işlemi hızlı bir şekilde gerçekleştirilir.</li>



<li><strong>Yanlış Veri Girişini Önleme:</strong> Hatalı numara girişlerini engelleyerek veri doğruluğunu artırır.</li>



<li><strong>Kaynak Verimliliği:</strong> Düşük işlem gücü gerektirir, bu da küçük cihazlarda bile çalışabilir olmasını sağlar.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">Dezavantajları</h4>



<ul class="wp-block-list">
<li><strong>Güvenlik Zayıflığı:</strong> Algoritma sadece doğrulama için tasarlanmıştır; güvenlik sağlayamaz. Numaranın doğruluğunu kontrol eder ancak numaranın sahte mi yoksa gerçek mi olduğunu anlamaz.</li>



<li><strong>Basit Hatalar:</strong> Algoritma sadece tek bir basamağın yanlış girilmesini ya da iki basamağın yer değiştirilmesini tespit edebilir.</li>
</ul>



<p class="wp-block-paragraph">Luhn Algoritması, doğrulama işlemlerinde etkili bir araçtır. Özellikle kimlik numaraları ve kredi kartları gibi verilerin doğruluğunu sağlamada önemli bir rol oynar. Bununla birlikte, güvenlik açısından tek başına yeterli değildir ve daha sofistike güvenlik sistemleriyle desteklenmelidir. Günümüzde bile, hatalı girişleri engellemek için bu algoritma sıklıkla kullanılmaktadır.</p>



<p class="wp-block-paragraph"><strong>Kaynakça:<a href="https://www.investopedia.com/terms/l/luhn-algorithm.asp">investopedia</a>, <a href="https://medium.com/@vitaliykorzenkoua/understanding-the-luhn-algorithm-for-credit-card-validation-41bfe8cb4ff0">medium</a>, <a href="https://www.academia.edu/19957955/Transposition_Error_Detection_in_Luhn_s_Algorithm">academia</a></strong></p>
<p>The post <a href="https://www.halildurmus.com/2025/08/29/luhn-algoritmasi/">Luhn Algoritması</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2025/08/29/luhn-algoritmasi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Şifrelerin Çalışma Prensibi ve Güvenliği</title>
		<link>https://www.halildurmus.com/2024/12/22/sifrelerin-calisma-prensibi-ve-guvenligi/</link>
					<comments>https://www.halildurmus.com/2024/12/22/sifrelerin-calisma-prensibi-ve-guvenligi/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Sun, 22 Dec 2024 06:00:00 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[DijitalGüvenlik]]></category>
		<category><![CDATA[HashAlgoritmaları]]></category>
		<category><![CDATA[MD5]]></category>
		<category><![CDATA[ŞifreGüvenliği]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=4966</guid>

					<description><![CDATA[<p>Günümüzün dijital dünyasında, gizlilik ve güvenlik en üst düzeyde öncelik taşırken, çeşitli online platformlarda dolaşırken ve hesaplar oluştururken şifreler kullanmak kaçınılmaz hale gelmiştir. Ancak, sadece karmaşık karakterlerden oluşan bir şifre oluşturmanın ötesinde, şifrelerin nasıl çalıştığını ve güvende tutulduğunu anlamak da son derece önemlidir. Bu makalemizde Şifrelerin Çalışma Prensibi ve Güvenliği ilgili konu başlıklarını ele alacağız. [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2024/12/22/sifrelerin-calisma-prensibi-ve-guvenligi/">Şifrelerin Çalışma Prensibi ve Güvenliği</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Günümüzün dijital dünyasında, gizlilik ve güvenlik en üst düzeyde öncelik taşırken, çeşitli online platformlarda dolaşırken ve hesaplar oluştururken şifreler kullanmak kaçınılmaz hale gelmiştir. Ancak, sadece karmaşık karakterlerden oluşan bir şifre oluşturmanın ötesinde, şifrelerin nasıl çalıştığını ve güvende tutulduğunu anlamak da son derece önemlidir. Bu makalemizde Şifrelerin Çalışma Prensibi ve Güvenliği ilgili konu başlıklarını ele alacağız.</p>



<h3 class="wp-block-heading">Şifrelerin Temel İşleyişi</h3>



<p class="wp-block-paragraph">Şifreler, kullanıcıların kimlik doğrulamasını sağlamak ve hassas verileri korumak amacıyla kullanılır. İşte şifrelerin temel işleyişi:</p>



<p class="wp-block-paragraph"><strong>Şifre Oluşturma ve Karmaşıklık</strong>: Bir hesap oluşturduğunuzda veya mevcut bir hesap için şifre belirlediğinizde, karmaşık karakterlerin (harf, rakam, sembol) kombinasyonlarından oluşan güçlü bir şifre seçmelisiniz. Bu, şifrenizin tahmin edilmesini zorlaştırarak güvenliğinizi artırır.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="787" height="430" src="https://www.halildurmus.com/wp-content/uploads/2023/08/password.png" alt="" class="wp-image-4970" srcset="https://www.halildurmus.com/wp-content/uploads/2023/08/password.png 787w, https://www.halildurmus.com/wp-content/uploads/2023/08/password-300x164.png 300w, https://www.halildurmus.com/wp-content/uploads/2023/08/password-768x420.png 768w" sizes="auto, (max-width: 787px) 100vw, 787px" /></figure>



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



<p class="wp-block-paragraph"><strong>Hashing İşlemi</strong>: Web siteleri, kullanıcıların şifrelerini açık metin olarak saklamak yerine, &#8220;hashing&#8221; denilen bir işlemi kullanarak şifrelerin güvenliğini sağlar. Hashing, girdi olarak aldığı veriyi (şifre) matematiksel bir algoritmaya tabi tutarak sabit uzunluklu bir çıktı (hash) üretir. Bu çıktı, orijinal veriye geri dönüştürülemez ve tersine mühendislik yapılamaz.</p>



<p class="wp-block-paragraph"><strong>Tuzlama (Salting)</strong>: Hashing tek başına yeterli değildir çünkü aynı veri her zaman aynı hash değerini üretir. Bu, saldırganların &#8220;rainbow table&#8221; saldırıları gibi yöntemlerle şifreleri kırmalarına olanak tanır. Bu nedenle, web siteleri her kullanıcının şifresine rastgele bir dize ekleyerek (tuzlama) hash işlemini güçlendirir. Bu şekilde, aynı şifrenin farklı kullanıcılar için farklı hash değerleri üretmesi sağlanır.</p>



<h3 class="wp-block-heading">Şifrelerin Güvenliği ve Depolanması</h3>



<p class="wp-block-paragraph">Şifrelerin güvenliği, kullanıcı verilerinin yetkisiz erişime karşı korunması için temel bir gerekliliktir. İşte şifrelerin güvenliği ve depolanması hakkında bazı temel kavramlar:</p>



<p class="wp-block-paragraph"><strong>Hash Fonksiyonları</strong>: Web siteleri, güvenliği artırmak için özel olarak tasarlanmış hash algoritmaları kullanır. Bu algoritmalar, hesaplamalı olarak maliyetli ve tersine mühendislik yapılması zor olan yapıları içerir. Popüler hash algoritmaları arasında SHA-256, MD5 ve bcrypt bulunur.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="600" height="443" src="https://www.halildurmus.com/wp-content/uploads/2023/08/MD5-password.png" alt="" class="wp-image-4969" srcset="https://www.halildurmus.com/wp-content/uploads/2023/08/MD5-password.png 600w, https://www.halildurmus.com/wp-content/uploads/2023/08/MD5-password-300x222.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>



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



<p class="wp-block-paragraph"><strong>Veri Tabanları ve Şifrelenmiş Depolama</strong>: Kullanıcı şifreleri, genellikle şifrelenmiş veri tabanlarında saklanır. Bu, şifrelerin yetkisiz erişimden korunmasına yardımcı olur. Şifrelenmiş depolama, verilerin sadece yetkili kişiler tarafından anlaşılabilir hale getirilmesini sağlar.</p>



<p class="wp-block-paragraph">Şifreler, çevrimiçi güvenliği sağlamak ve kullanıcı verilerini korumak için önemli bir rol oynar. Karmaşık ve tahmin edilmesi zor şifreler oluşturmak, hash işlemi ve tuzlama gibi yöntemlerin kullanılması, kullanıcıların güvenliğini artırır. Web siteleri, kullanıcı şifrelerini güvenli veri tabanlarında şifrelenmiş olarak saklayarak güvenlik önlemlerini artırır. Kullanıcılar da düzenli olarak şifrelerini güncellemeli ve hesap güvenliğine özen göstermelidir.</p>



<p class="wp-block-paragraph">Güvenli şifreler oluşturmak ve çevrimiçi hesaplarınızı korumak, dijital dünyada güvende kalmanın temel adımlarından biridir.</p>



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



<p class="wp-block-paragraph"><a href="https://emn178.github.io/online-tools/" target="_blank" rel="noreferrer noopener">Online-Tools-Md5</a></p>
<p>The post <a href="https://www.halildurmus.com/2024/12/22/sifrelerin-calisma-prensibi-ve-guvenligi/">Şifrelerin Çalışma Prensibi ve Güvenliği</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2024/12/22/sifrelerin-calisma-prensibi-ve-guvenligi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kriptoloji Nedir? Şifreleme Algoritmaları</title>
		<link>https://www.halildurmus.com/2024/09/10/kriptoloji-nedir-sifreleme-algoritmalari/</link>
					<comments>https://www.halildurmus.com/2024/09/10/kriptoloji-nedir-sifreleme-algoritmalari/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Tue, 10 Sep 2024 16:47:45 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Algoritma]]></category>
		<category><![CDATA[Kriptoloji nedir]]></category>
		<category><![CDATA[Kriptoloji örnek]]></category>
		<category><![CDATA[Veri]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=4823</guid>

					<description><![CDATA[<p>Günümüzde verilerin iletilmesinin yanı sıra verilerin güvenli bir şekilde iletilmesi için iletim esnasındaki gizlilik çok önem taşımaktadır. İletilmek istenen bilgilerin bir başkası tarafından kolayca erişilmemesi için şifreleme yöntemlerine başvurulmaktadır. Bu şifreleme yöntemine kriptoloji denilmektedir. Kriptoloji, cruptos (gizli) ve logos (bilim) kelimelerinin birleşiminden oluşmuştur ve kelime anlamı olarak gizleme bilimi manasına gelmektedir. Kriptolojide orijinal metne, düz [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2024/09/10/kriptoloji-nedir-sifreleme-algoritmalari/">Kriptoloji Nedir? Şifreleme Algoritmaları</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Günümüzde verilerin iletilmesinin yanı sıra verilerin güvenli bir şekilde iletilmesi için iletim esnasındaki gizlilik çok önem taşımaktadır. İletilmek istenen bilgilerin bir başkası tarafından kolayca erişilmemesi için şifreleme yöntemlerine başvurulmaktadır. Bu şifreleme yöntemine <strong>kriptoloji </strong>denilmektedir. Kriptoloji, cruptos (gizli) ve logos (bilim) kelimelerinin birleşiminden oluşmuştur ve kelime anlamı olarak gizleme bilimi manasına gelmektedir. </p>



<p class="wp-block-paragraph">Kriptolojide orijinal metne, düz metin (plaintext), şifrelenmiş metne ise şifreli metin (ciphertext) denilmektedir. Düz metnin içeriğini saklamak için şifreleme (encryption) işleminin yapılması gerekmektedir. Bu sayede metnin içindeki bilgi başkalarının anlayamayacağı hale gelmektedir. Şifrelenmiş metni okuyacak olan kişilerin elinde şifreyi çözecek anahtar bulunmalıdır. Bu anahtar sayesinde şifrelenmiş olan metin düz metne çevrilmektedir. Bu işleme şifre çözme (decryption) işlemi denilmektedir. Şekilde şifreleme ve şifre çözme adımları gösterilmiştir.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="328" src="https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-ve-sifre-cozme-adimlarii-1024x328.png" alt="" class="wp-image-4831" srcset="https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-ve-sifre-cozme-adimlarii-1024x328.png 1024w, https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-ve-sifre-cozme-adimlarii-300x96.png 300w, https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-ve-sifre-cozme-adimlarii-768x246.png 768w, https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-ve-sifre-cozme-adimlarii-810x259.png 810w, https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-ve-sifre-cozme-adimlarii-1140x365.png 1140w, https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-ve-sifre-cozme-adimlarii.png 1250w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Kriptoloji, hem şifre bilimini (kriptografi) hem de şifre analizini (kripto analiz) kapsayan matematiksel  tekniklerle ifade edilen bir bilim dalıdır. Kriptografinin temel amacında veri güvenliğinin sağlanması için açık verileri gizli verilere dönüştürme işleminin yapılması vardır.</p>



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



<h3 class="wp-block-heading">Şifreleme Algoritmaları</h3>



<p class="wp-block-paragraph">Şifreleme ve şifre çözme işlemleri için çeşitli algoritmalar kullanılmaktadır. Bu algoritmalara kriptografik algoritmalar denilmektedir. Kriptografik algoritmalar, şifreleme ve şifre çözme işlemlerini anahtar kullanarak yapmaktadır. Şifreli metin sadece metin şifreleme işlemi için kullanılan anahtar ile çözülebilmektedir. Anahtar kullanan şifreleme algoritmaları simetrik şifreleme (gizli anahtar şifreleme) ve asimetrik şifreleme (açık anahtar şifreleme) algoritmaları olmak üzere ikiye ayrılmaktadır.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="600" height="450" src="https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-Algoritmalari.png" alt="" class="wp-image-4827" srcset="https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-Algoritmalari.png 600w, https://www.halildurmus.com/wp-content/uploads/2022/12/Sifreleme-Algoritmalari-300x225.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>



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



<h4 class="wp-block-heading">1.Simetrik Şifreleme Algoritmaları</h4>



<p class="wp-block-paragraph">Simetrik şifreleme, gizli anahtarlı şifreleme olarak adlandırılmaktadır. <strong>Simetrik şifreleme algoritmalarında bilginin şifrelenmesi ve şifrelenmiş bilginin çözülmesi işlemi aynı anahtar kullanılarak gerçekleştirilmektedir.</strong> Bu anahtar sadece şifreleme işlemi ve şifre çözme işlemini yapacak olan kişilerde bulunmaktadır. Simetrik şifreleme algoritması açık metni ile gizli anahtarı veri girişi olarak alıp, çıktı olarak şifreli metni üretir. Düz metne erişmek ise sadece gizli anahtarın bilinmesiyle mümkün olmaktadır. Yani<br>şifreli metni düz metne çevirme işlemi gizli anahtar kullanarak gerçekleştirilmektedir. Simetrik şifreleme algoritması diyagramı verilmiştir.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="328" src="https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritmalari-1024x328.png" alt="" class="wp-image-4829" srcset="https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritmalari-1024x328.png 1024w, https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritmalari-300x96.png 300w, https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritmalari-768x246.png 768w, https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritmalari-810x259.png 810w, https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritmalari-1140x365.png 1140w, https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritmalari.png 1250w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



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



<p class="wp-block-paragraph">Birçok simetrik algoritma çeşitleri bulunmaktadır. Bu algoritmalardan bazılarının adı, geliştiricisi ve geliştirme tarih bilgilerine yer verilmiştir.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritma-.png" alt="" class="wp-image-4833" srcset="https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritma-.png 1024w, https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritma--300x225.png 300w, https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritma--768x576.png 768w, https://www.halildurmus.com/wp-content/uploads/2022/12/Simetrik-Sifreleme-Algoritma--810x608.png 810w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



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



<h3 class="wp-block-heading">2.Asimetrik Şifreleme Algoritmaları</h3>



<p class="wp-block-paragraph">Asimetrik şifreleme, açık anahtarlı şifreleme olarak adlandırılmaktadır. Simetrik şifreleme algoritmasından farklı olarak asimetrik şifreleme algoritmasında açık ve özel anahtar olmak üzere iki farklı anahtar bulunmaktadır. Şifreleme anahtarına <strong>açık anahtar</strong>, şifre çözüm anahtarına ise <strong>özel anahtar</strong> ismi verilmektedir. Şifre çözme işlemi için kullanılan anahtar ile şifreleme işlemi için kullanılan anahtarlar birbirinden farklıdır. Şifre anahtarının herkese açık olması gerektiğinden bu algoritmalara açık anahtarlı algoritmalar denilmiştir. Bu sebepten dolayı bir kullanıcının açık anahtarı ile şifrelenen bir metin sadece bu kullanıcıya ait olan özel anahtar ile metnin şifresi çözülebilmektedir. Asimetrik şifreleme algoritması diyagramı gösterilmiştir.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="328" src="https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme-1024x328.png" alt="" class="wp-image-4835" srcset="https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme-1024x328.png 1024w, https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme-300x96.png 300w, https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme-768x246.png 768w, https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme-810x259.png 810w, https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme-1140x365.png 1140w, https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme.png 1250w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



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



<p class="wp-block-paragraph">Birçok asimetrik şifreleme algoritması bulunmaktadır. Asimetrik şifreleme algoritmalarından bazıları<br>verilmiştir.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="600" height="400" src="https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme-Algoritmalari.png" alt="" class="wp-image-4836" srcset="https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme-Algoritmalari.png 600w, https://www.halildurmus.com/wp-content/uploads/2022/12/Asimetrik-Sifreleme-Algoritmalari-300x200.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>



<h4 class="wp-block-heading">Avantaj ve Dezavantajları</h4>



<p class="wp-block-paragraph">Her iki tip&nbsp;şifrelemenin&nbsp;de diğerine kıyasla avantajları ve dezavantajları bulunur. Simetrik şifreleme algoritmaları çok daha hızlıdır. Daha az hesaplama gücü gerektirir. Fakat bunların başlıca zayıflığı anahtar paylaşımıdır. Bilgiyi şifrelemek ve bilginin şifresini açmak için aynı anahtar kullanıldığından, bu anahtarın veriye erişmesi gereken herhangi bir kişiyle paylaşılması gereklidir. Bu durum da doğal olarak güvenlik riskleri meydana getirir.</p>



<p class="wp-block-paragraph">Bunun aksine asimetrik şifrelemede şifre paylaşımı sorunu, şifreleme için açık anahtar, şifreyi açmak için de özel anahtar kullanılmasıyla çözülür. Fakat bu durumda da, asimetrik şifreleme sistemleri simetrik sistemlere kıyasla çok yavaş hale gelir ve çok daha uzun anahtarlar nedeniyle daha fazla hesaplama gücünü zorunlu kılar.</p>



<h4 class="wp-block-heading">Hibrid Sistemler</h4>



<p class="wp-block-paragraph">Birçok uygulamada, simetrik ve asimetrik şifreleme bir arada kullanılır. Bu tip hibrid sistemlerin en tipik örnekleri, internet içinde güvenli iletişim sağlamak üzere tasarlanmış Güvenli Yuva Katmanı (SSL) ve Taşıma Katmanı Güvenliği (TLS) kriptografik protokolleridir. SSL protokolleri artık güvensiz kabul edilirler. Bunların kullanımına devam edilmemelidir. TLS protokolleri güvenli kabul edilirler. Tüm web tarayıcılarında yaygın olarak kullanılırlar.&nbsp;</p>



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



<p class="wp-block-paragraph"><strong>Kaynakça:</strong> <a href="https://www.ssl2buy.com/wiki/symmetric-vs-asymmetric-encryption-what-are-differences#:~:text=Difference%20Between%20Symmetric%20and%20Asymmetric,and%20decrypt%20messages%20when%20communicating." target="_blank" rel="noreferrer noopener">ssl2buy</a>, <a href="https://www.encryptionconsulting.com/education-center/symmetric-vs-asymmetric-encryption/">encryptionconsulting</a></p>



<p class="wp-block-paragraph">Kodaz, H., &amp; Botsali, F. M. (2010). Simetrik ve asimetrik şifreleme algoritmalarının karşılaştırılması. Selçuk Teknik Dergisi, 9(1), 10-23</p>



<p class="wp-block-paragraph">Erkan, H. (2010). ASELSAN Kriptografik Algoritma Tasarım Yetenekleri. Aselsan, 23(81), 26.</p>
<p>The post <a href="https://www.halildurmus.com/2024/09/10/kriptoloji-nedir-sifreleme-algoritmalari/">Kriptoloji Nedir? Şifreleme Algoritmaları</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2024/09/10/kriptoloji-nedir-sifreleme-algoritmalari/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Graf Teorisi</title>
		<link>https://www.halildurmus.com/2024/08/29/graf-teorisi/</link>
					<comments>https://www.halildurmus.com/2024/08/29/graf-teorisi/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Thu, 29 Aug 2024 06:00:00 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Graf]]></category>
		<category><![CDATA[Matematik]]></category>
		<category><![CDATA[Veri]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=4714</guid>

					<description><![CDATA[<p>Graf teorisi elini kaldırmadan çizmeyi birçoğumuz ilkokul yıllarımızda karşılaşmışızdır. Ya arkadaşlarımız bizlere yada bizler onlara resimdeki şekli hiç el kaldırmadan çizip çizemeyeceğini sormuşuzdur. Hepimiz birkaç denemeden sonra sonucuna ulaşmışızdır. Ancak hiçbirimiz bunun aslında çok basit bir Matematik problemi olduğu bilmiyorduk. Graf Nedir? Bir graf G = (V,E) kümelerinden oluşur. Burada V = {v1,v2,…} kümesinin elemanlarına [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2024/08/29/graf-teorisi/">Graf Teorisi</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Graf teorisi elini kaldırmadan çizmeyi birçoğumuz ilkokul yıllarımızda karşılaşmışızdır. Ya arkadaşlarımız bizlere yada bizler onlara resimdeki şekli hiç el kaldırmadan çizip çizemeyeceğini sormuşuzdur. Hepimiz birkaç denemeden sonra sonucuna ulaşmışızdır. Ancak hiçbirimiz bunun aslında çok basit bir Matematik problemi olduğu bilmiyorduk.</p>



<h3 class="wp-block-heading">Graf Nedir?</h3>



<p class="wp-block-paragraph">Bir graf G = (V,E) kümelerinden oluşur. Burada V = {v<sub>1</sub>,v<sub>2</sub>,…} kümesinin elemanlarına <strong>düğüm</strong>; E = {e<sub>1</sub>,e<sub>2</sub> ,…} kümesinin elemanlarına da <strong>kenar</strong> adı verilir. Bir e<sub>k</sub> kenarı sırasız bir çift (v<sub>i</sub>, v<sub>j</sub>) ile belirlenir. Sözü edilen v<sub>i</sub> ve v<sub>j</sub> düğümleri e<sub>k</sub> kenarının başlangıç ve bitiş düğümleridir. Grafların en yaygın gösterimi şekilde gösterildiği gibi, düğümlerin birer nokta, kenarların ise kendi başlangıç ve bitiş düğümleri arasında doğru parçaları ile gösterildiği diyagramlardır. Diyagramın kendisi graf olarak olarak adlandırılır.</p>



<p class="wp-block-paragraph">Bir grafta, herhangi bir e<sub>k</sub> kenarı bir (v<sub>i</sub>, v<sub>j</sub>) düğüm çifti ile eşleşir. Başlangıç ve bitiş düğümleri aynı olan kenar <strong>döngü </strong>olarak adlandırılır. Şekilde e<sub>7</sub> kenarı bir döngüdür. Başlangıç ve bitiş düğümü aynı olan birden fazla kenar var ise bu kenarlara paralel denir. Şekilde e<sub>2</sub> ve e<sub>3</sub> kenarları paraleldir.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="495" height="335" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Teorisi.png" alt="" class="wp-image-4715" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Teorisi.png 495w, https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Teorisi-300x203.png 300w" sizes="auto, (max-width: 495px) 100vw, 495px" /></figure>
</div>


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



<h4 class="wp-block-heading">Basit (Simple) Graf</h4>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="has-text-align-left wp-block-paragraph">Aynı iki düğümün sadece bir hatla bağlandığı, herhangi bir düğümü yine kendisine bağlayan bir hattın (çevrimin) olmadığı, hatların bir değer almadığı ve yönünün tanımlanmadığı, düğüm ve hatların sınıflandırılmadığı graflara basit graf denir.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="435" height="335" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Basit-Graf-1.png" alt="" class="wp-image-4725" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Basit-Graf-1.png 435w, https://www.halildurmus.com/wp-content/uploads/2022/11/Basit-Graf-1-300x231.png 300w" sizes="auto, (max-width: 435px) 100vw, 435px" /></figure>
</div>
</div>
</div>
</div>



<h4 class="wp-block-heading">Çoklu (Multi) Graf</h4>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph">İki yada daha fazla düğüm arasında birden fazla hat (paralel hatlar) varsa bu tür graflara çoklu (multi) graf denir. Çoklu graflar da yönsüz ve çevrimsizdir. Örneğin iki şehir arasında iki farklı yol varsa, bu durum çoklu grafla temsil edilir.</p>



<p class="wp-block-paragraph"><strong>Dipnot:</strong> Basit graflar, çoklu graftir fakat çoklu graflar basit graf degildir.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="495" height="385" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Coklu-Graf.png" alt="" class="wp-image-4728" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Coklu-Graf.png 495w, https://www.halildurmus.com/wp-content/uploads/2022/11/Coklu-Graf-300x233.png 300w" sizes="auto, (max-width: 495px) 100vw, 495px" /></figure>
</div>
</div>



<h4 class="wp-block-heading">Pseudo Graf</h4>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph">Çoklu grafların yeterli olmadığı durumlarda kullanılır. Yönsüz, paralel kenarı olan ve döngü içeren graflardır. Yönsüz grafların en temel halidir.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Pseudo-Graf-1.png" alt="" class="wp-image-4731" width="402" height="385" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Pseudo-Graf-1.png 495w, https://www.halildurmus.com/wp-content/uploads/2022/11/Pseudo-Graf-1-300x288.png 300w" sizes="auto, (max-width: 402px) 100vw, 402px" /></figure>
</div>
</div>



<h4 class="wp-block-heading">Yönlü Graf</h4>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph">Bir graftaki hatlar yön bilgisine sahipse bu tür graflara yönlü graf (Directed graph) denir. Bu yön bilgisi bağlantının nereden başlayıp nereden bittiğini belirtir. Yön bilgisi olan graflarda düğümler arasındaki bağlantının yönü vardır.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="455" height="336" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Yonlu-Graf.png" alt="" class="wp-image-4733" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Yonlu-Graf.png 455w, https://www.halildurmus.com/wp-content/uploads/2022/11/Yonlu-Graf-300x222.png 300w" sizes="auto, (max-width: 455px) 100vw, 455px" /></figure>
</div>
</div>



<h4 class="wp-block-heading">Çoklu Yönlü Graf</h4>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph">İki yönde bağlantı varsa ters yönde iki ayrı hat kullanılır ve bu tür graflara çoklu yönlü graf denir. Graf yapısında bütün kenarlar aynı çeşittir. Yani ya hepsi yönlüdür ya da değildir. Yol ağını temsil eden bir grafta trafiğin tek yada çift yönlü oluşu yönlü graflar için birörnektir.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="349" height="276" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Coklu-Yonlu-Graf.png" alt="" class="wp-image-4735" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Coklu-Yonlu-Graf.png 349w, https://www.halildurmus.com/wp-content/uploads/2022/11/Coklu-Yonlu-Graf-300x237.png 300w" sizes="auto, (max-width: 349px) 100vw, 349px" /></figure>
</div>
</div>



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



<h4 class="wp-block-heading">Grafların Karşılaştırılması</h4>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="400" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Karsilastirilmasi.png" alt="" class="wp-image-4737" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Karsilastirilmasi.png 800w, https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Karsilastirilmasi-300x150.png 300w, https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Karsilastirilmasi-768x384.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<h4 class="wp-block-heading">Maaliyetli (Ağırlıklı) Graf</h4>



<p class="wp-block-paragraph">Graf yapısındaki hatlar değer alabilir ve bu değerler grafın yapısına katılabilir. Aşağıdaki örnekte olduğu gibi, bir grafın üzerindeki hatların değerleri eşit değilse ve her biri farklı bir değer alabiliyorsa bu tip graflara maliyetli yada <strong>ağırlıklı graf (weighted graph)</strong> denir. Bütün hatların değeri aynı ise bu graf maliyetli graf olarak anılamaz. Ağırlıkların bir anlamı yoktur ve her hattın değerinin 1 olduğu basit graf gibi değerlendirilir. Şehirlerin arasındaki mesafelerin hatlara değer olarak atandığı yol haritasını temsil eden graflar maliyetli graflar için örnek verilebilir.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="815" height="363" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Maaliyetli-Graflar.png" alt="" class="wp-image-4738" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Maaliyetli-Graflar.png 815w, https://www.halildurmus.com/wp-content/uploads/2022/11/Maaliyetli-Graflar-300x134.png 300w, https://www.halildurmus.com/wp-content/uploads/2022/11/Maaliyetli-Graflar-768x342.png 768w, https://www.halildurmus.com/wp-content/uploads/2022/11/Maaliyetli-Graflar-810x361.png 810w" sizes="auto, (max-width: 815px) 100vw, 815px" /></figure>



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



<h4 class="wp-block-heading">Düzlemsel Graf</h4>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph">Soldaki graf, kesişmeyen hatlardan oluşacak şekilde sağdaki gibi de çizilebilir. Bu şekilde birbirini kesmeyen hatlardan oluşacak şekilde çizilebilen graflara düzlemsel graf denir</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="592" height="270" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Duzlemsel-Graf.png" alt="" class="wp-image-4739" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Duzlemsel-Graf.png 592w, https://www.halildurmus.com/wp-content/uploads/2022/11/Duzlemsel-Graf-300x137.png 300w" sizes="auto, (max-width: 592px) 100vw, 592px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">Kaynakça: <a href="https://medium.com/basecs/a-gentle-introduction-to-graph-theory-77969829ead8" target="_blank" rel="noreferrer noopener">Medium</a>, <a href="https://freefeast.info/difference-between/difference-between-trees-and-graphs-trees-vs-graphs/" target="_blank" rel="noreferrer noopener">Freefeast</a></p>



<p class="wp-block-paragraph"><a href="https://www.youtube.com/watch?v=gXgEDyodOJU&amp;t=319s" target="_blank" rel="noreferrer noopener">Data Structures: Introduction To Graphs</a></p>
<p>The post <a href="https://www.halildurmus.com/2024/08/29/graf-teorisi/">Graf Teorisi</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2024/08/29/graf-teorisi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Graf Renklendirme (Welsh-Powell Algoritması)</title>
		<link>https://www.halildurmus.com/2024/04/30/graf-renklendirme-welsh-powell-algoritmasi/</link>
					<comments>https://www.halildurmus.com/2024/04/30/graf-renklendirme-welsh-powell-algoritmasi/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Tue, 30 Apr 2024 05:30:00 +0000</pubDate>
				<category><![CDATA[Bilgisayar]]></category>
		<category><![CDATA[Genel]]></category>
		<category><![CDATA[Algoritma]]></category>
		<category><![CDATA[Graf]]></category>
		<category><![CDATA[Graph Coloring]]></category>
		<category><![CDATA[Matematik]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=4683</guid>

					<description><![CDATA[<p>Graf renklendirme de kullanılan algoritmalardan birisi Welch ve Powel’in önerdiği yöntemdir. Bu yöntem genel olarak düğümlerin derecelerine dayanmaktadır. Renklendirmede kullanılan toplam renk sayısı kromatik (chromatik) sayı olarak adlandırılır. Algoritmanın davranışı adım adım aşağıdaki gibidir. Yukarıdaki algoritmayı aşağıdaki örnek graf üzerinde açıklayacak olursak; 1.İlk renk birinci sıradaki düğüme atanır (en yüksek derecesi olan) ve daha sonra [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2024/04/30/graf-renklendirme-welsh-powell-algoritmasi/">Graf Renklendirme (Welsh-Powell Algoritması)</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Graf renklendirme de kullanılan algoritmalardan birisi Welch ve Powel’in önerdiği yöntemdir. Bu yöntem genel olarak düğümlerin derecelerine dayanmaktadır. Renklendirmede kullanılan toplam renk sayısı kromatik (chromatik) sayı olarak adlandırılır.  Algoritmanın davranışı adım adım aşağıdaki gibidir.</p>



<ol class="wp-block-list">
<li>Düğümler derecelerine göre büyükten küçüğe doğru sıralanır.</li>



<li>İlk renk birinci sıradaki düğüme ve bu düğümün komşusu olmayan düğümlere atanır.</li>



<li>Bir sonraki renge geçilir ve bu renk sıradaki derecesi en yüksek olan düğüme ve bu düğümün komşusu olmayan düğümlere atanır.</li>



<li>Süreç bu şekilde renklendirilmemiş düğüm kalmayana kadar devam ettirilir.</li>
</ol>



<p class="wp-block-paragraph">Yukarıdaki algoritmayı aşağıdaki örnek graf üzerinde açıklayacak olursak;</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="641" height="211" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Welch-Powel-Algoritmasi.png" alt="" class="wp-image-4684" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Welch-Powel-Algoritmasi.png 641w, https://www.halildurmus.com/wp-content/uploads/2022/11/Welch-Powel-Algoritmasi-300x99.png 300w" sizes="auto, (max-width: 641px) 100vw, 641px" /></figure>



<p class="wp-block-paragraph">1.İlk renk birinci sıradaki düğüme atanır (en yüksek derecesi olan) ve daha sonra aynı renk birbirlerine bitişik olmayacak biçimde diğer düğümlere verilir.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="341" height="211" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirme-1-Asama.png" alt="" class="wp-image-4686" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirme-1-Asama.png 341w, https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirme-1-Asama-300x186.png 300w" sizes="auto, (max-width: 341px) 100vw, 341px" /></figure>



<p class="wp-block-paragraph">2.Bir sonraki renge geçilir, bu renk sıradaki derecesi en yüksek olan düğüme atanır; ve sonra bu renk, daha önce renklendirilmemiş düğümlere birbirlerine bitişi olmayacak şekilde atanır.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="341" height="211" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirme-1-Asama-1.png" alt="" class="wp-image-4687" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirme-1-Asama-1.png 341w, https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirme-1-Asama-1-300x186.png 300w" sizes="auto, (max-width: 341px) 100vw, 341px" /></figure>



<p class="wp-block-paragraph">4.Tüm düğümlere renk verilinceye kadar işlem tekrar edilir.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="341" height="211" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirme-2-Asama.png" alt="" class="wp-image-4688" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirme-2-Asama.png 341w, https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirme-2-Asama-300x186.png 300w" sizes="auto, (max-width: 341px) 100vw, 341px" /></figure>



<h3 class="wp-block-heading">Uygulama Alanları;</h3>



<ul class="wp-block-list">
<li>Harita renklendirme,</li>



<li>İşlemcilerin işlem sırasını belirleme,</li>



<li>Ders ve sınav programı ayarlama</li>



<li>Hava alanlarında iniş ve kalkış sırasını belirleme vs.</li>
</ul>



<p class="wp-block-paragraph">Uygulamada, graf renklendirmenin kullanılacağı alanların başında, ilk akla gelen, harita üzerindeki bölgelerin renklendirilmesi olabilir. Graf renklendirme bilgisayar biliminde ve günlük yaşamdaki birçok problemin çözümüne ciddi bir yaklaşımdır. Şimde de günlük hayatımız da kullandığımız graf renklendirme işlemini, çakışmadan sınav oturumlarının belirlenmesi örneğinde inceleyeceğiz.</p>



<h3 class="wp-block-heading">Problem</h3>



<p class="wp-block-paragraph">Bir üniversitede final sınavları öyle yerleştirilmek istenmektedir ki öğrencilerin farklı derslerine ait sınavları çakışmasın. Üniversitede <strong>4 tane öğrenci</strong> ve <strong>6 tane ders</strong> vardır ve herhangi bir öğrenci tabi ki aynı anda birden çok ders almaktadır. Bir de elimizde hangi öğrencinin hangi dersleri aldığı liste vardır.</p>



<p class="wp-block-paragraph">4 tane öğrenci 6 tane ders varsa ilgili kümelerimiz:</p>



<p class="has-text-color wp-block-paragraph" style="color:#d73214">D={d0, d1, d2, d3, d4, d5}<br>Ö={Öğrenci-1, Öğrenci-2, Öğrenci-3, Öğrenci-4}</p>



<p class="wp-block-paragraph">Her bir öğrencinin aldığı dersler de aşağıdaki gibi olsun:</p>



<p class="has-text-color wp-block-paragraph" style="color:#d73214">Öğrenci-1: d0, d1, d4            Öğrenci-2: d0, d2, d4<br>Öğrenci-3: d2, d3, d5            Öğrenci-4: d3, d4, d5</p>



<p class="wp-block-paragraph"><strong>Soru:</strong> Herhangi bir öğrencinin sınavı çakışmayacak şekilde yerleştirme yapılmasına yönelik olarak sınavlar için kaç farklı oturum gerektiği ve aynı anda hangi derslere ait sınavların yapılabileceğini belirleyiniz.</p>



<h4 class="wp-block-heading"><strong>Çözüm:</strong> </h4>



<p class="wp-block-paragraph">Bu problem graf renklendirme ile çözülebilir. Dersler graf üzerindeki düğümler olarak kabul edilip  öğrencilerin aldığı dersler de düğümler arasındaki hatları belirler. Bu grafın renklendirilmesi sonucu hangi dersin aynı anda yapılabileceği sonucu çıkar; aynı renge ait dersler aynı anda yapılabilir denilir.  <strong>Kromatik</strong> sayı sınavların yapılması için gerekli toplam oturum sayısını verir.</p>



<p class="wp-block-paragraph">İlk yapılması gereken bu verilerden ilgili grafın ortaya çıkarılmasıdır; derslerin kendileri grafın düğümlerini,<br>alınan dersler de düğümler arasındaki bağlantıyı belirler. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="981" height="321" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Renklendirme-Problem.png" alt="" class="wp-image-4689" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Renklendirme-Problem.png 981w, https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Renklendirme-Problem-300x98.png 300w, https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Renklendirme-Problem-768x251.png 768w, https://www.halildurmus.com/wp-content/uploads/2022/11/Graf-Renklendirme-Problem-810x265.png 810w" sizes="auto, (max-width: 981px) 100vw, 981px" /></figure>



<p class="wp-block-paragraph">Graf elde edildikten sonra Welch ve Powel algoritmasına göre düğümler derecelerine göre sıralanır. En yüksek dereceli düğüme ilk renk atanır.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="731" height="321" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Olsuan-Graf-Derecelendirme.png" alt="" class="wp-image-4693" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Olsuan-Graf-Derecelendirme.png 731w, https://www.halildurmus.com/wp-content/uploads/2022/11/Olsuan-Graf-Derecelendirme-300x132.png 300w" sizes="auto, (max-width: 731px) 100vw, 731px" /></figure>



<p class="wp-block-paragraph">Welch ve Powel algoritmasına göre renklendirilirse aynı renge sahip olan dersler arasında ilişki olmadığı ve sınavların aynı anda yapılabileceği ortaya çıkar.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="342" height="321" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirilmis-Graf.png" alt="" class="wp-image-4690" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirilmis-Graf.png 342w, https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirilmis-Graf-300x282.png 300w" sizes="auto, (max-width: 342px) 100vw, 342px" /></figure>
</div>


<p class="wp-block-paragraph">Dolayısıyla Sonuç</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="631" height="321" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirilmis-Graf-Sonuc.png" alt="" class="wp-image-4692" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirilmis-Graf-Sonuc.png 631w, https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirilmis-Graf-Sonuc-300x153.png 300w" sizes="auto, (max-width: 631px) 100vw, 631px" /></figure>



<p class="wp-block-paragraph">Kromatik sayı 4 çıkmıştır; toplam dört oturum yapılmalıdır. Buna göre d4 dersinin ve d5 dersinin sınavı tek başına ayrı oturumlarda yapılmalıdır; ancak d2 ile d1 veya d0 ile d3 derslerinin sınavları aynı anda yapılabilir.</p>



<p class="wp-block-paragraph"><strong>Soru:</strong> Öğrenci-4 d4 dersini almaktan vazgeçip bırakırsa sınav yerleştirimi nasıl olur?</p>



<p class="wp-block-paragraph">Bu durumda Öğrenci-4’ün alacağı dersler d3 ve d5 olacaktır ve daha önce d4’den dolayı oluşan d3-d4 ve d4-d5 hatları, eğer bu kenarlar başka bir öğrenci tarafından da oluşturulmuyorsa graftan çıkarılacaktır. Bu durumda grafın yeni durumu ve renklendirme aşağıdaki gibi olur.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="772" height="321" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Olusan-Graf-Renklendirilmis-Graf.png" alt="" class="wp-image-4695" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Olusan-Graf-Renklendirilmis-Graf.png 772w, https://www.halildurmus.com/wp-content/uploads/2022/11/Olusan-Graf-Renklendirilmis-Graf-300x125.png 300w, https://www.halildurmus.com/wp-content/uploads/2022/11/Olusan-Graf-Renklendirilmis-Graf-768x319.png 768w" sizes="auto, (max-width: 772px) 100vw, 772px" /></figure>



<p class="wp-block-paragraph">Görüldüğü gibi kromatik sayı 3 çıkmıştır; bu durumda tüm oturum yeterlidir ve derslere ait sınavları aşağıdaki gibi yapılabilir:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="662" height="321" src="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirilmis-Graf-1.png" alt="" class="wp-image-4696" srcset="https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirilmis-Graf-1.png 662w, https://www.halildurmus.com/wp-content/uploads/2022/11/Renklendirilmis-Graf-1-300x145.png 300w" sizes="auto, (max-width: 662px) 100vw, 662px" /></figure>



<p class="wp-block-paragraph"><strong>Not:</strong>Düzlemsel bir G=(D, K) grafı en fazla 4 renk kullanılarak renklendirilebilir; yani, kromatik sayı 4&#8217;tür.</p>



<p class="wp-block-paragraph">Kaynakça: <a href="https://www.geeksforgeeks.org/graph-coloring-applications/">Geeksforgeeks</a>, <a href="http://web.math.princeton.edu/math_alive/5/Notes2.pdf" target="_blank" rel="noreferrer noopener">Princeton</a>,</p>



<p class="wp-block-paragraph">Gould, R. (Ed.). <em>Graph Theory.</em> Menlo Park, CA: Benjamin-Cummings, 1988.</p>



<p class="wp-block-paragraph"><a href="http://www.youtube.com/watch?v=h9wxtqoa1jY" target="_blank" rel="noreferrer noopener">Lec 6 | MIT 6.042J Mathematics for Computer Science, Fall 2010 | Video Lecture</a> </p>



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



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



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



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://www.halildurmus.com/2024/04/30/graf-renklendirme-welsh-powell-algoritmasi/">Graf Renklendirme (Welsh-Powell Algoritması)</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2024/04/30/graf-renklendirme-welsh-powell-algoritmasi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
