<?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>Halil Durmus</title>
	<atom:link href="https://www.halildurmus.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.halildurmus.com/</link>
	<description>Official Website</description>
	<lastBuildDate>Sun, 08 Mar 2026 14:21:04 +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>Halil Durmus</title>
	<link>https://www.halildurmus.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>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>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></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></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>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>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></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></p>



<p>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></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><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>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></p>



<p>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></p>



<p>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><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>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>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></p>



<p>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></p>



<p>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><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>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></p>



<p><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></p>



<p><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><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>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></p>



<p>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></p>



<p>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></p>



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



<p>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>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>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>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></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>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>.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></p>



<p>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>⚠️ Ö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>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></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></p>



<p>📌 <strong>GC Kuralı:</strong></p>



<p>Ç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></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>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></p>



<p><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></p>



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



<p>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></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></p>



<p>📌 <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></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></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></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></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></p>



<p>📌 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></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>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>.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>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></p>



<p>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>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><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>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>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>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>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>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></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>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><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>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>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>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>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>.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>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></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>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>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></p>



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



<p><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><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><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></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>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>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></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>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>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>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>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>Çıktı:</p>



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



<p>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>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></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>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><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>Oyun Teorisi: Günlük Hayatımızdaki Stratejik Kararlar</title>
		<link>https://www.halildurmus.com/2025/07/16/oyun-teorisi-gunluk-hayatimizdaki-stratejik-kararlar/</link>
					<comments>https://www.halildurmus.com/2025/07/16/oyun-teorisi-gunluk-hayatimizdaki-stratejik-kararlar/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Wed, 16 Jul 2025 05:00:00 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Genel Kültür]]></category>
		<category><![CDATA[#Günlük Hayat]]></category>
		<category><![CDATA[#OyunTeorisi]]></category>
		<category><![CDATA[#Stratejik Kararlar]]></category>
		<category><![CDATA[İşHayatındaOyunTeorisi]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=5084</guid>

					<description><![CDATA[<p>Oyun teorisi, genellikle akademik ve karmaşık bir konu olarak düşünülse de, aslında günlük hayatımızda farkında olmadan kullandığımız bir araçtır. İki kişi arasında yapılan bir tartışma, bir ülkenin dış politikadaki kararları gibi durumlar, oyun teorisinin alanına girer. Oyun teorisi, stratejik düşünmenin temel ilkelerini sunar. Ünlü matematikçi John Nash&#8217;in dediği gibi: &#8220;Oyun oynarken ihtiyacımız olan aslında biraz [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2025/07/16/oyun-teorisi-gunluk-hayatimizdaki-stratejik-kararlar/">Oyun Teorisi: Günlük Hayatımızdaki Stratejik Kararlar</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Oyun teorisi, genellikle akademik ve karmaşık bir konu olarak düşünülse de, aslında günlük hayatımızda farkında olmadan kullandığımız bir araçtır. İki kişi arasında yapılan bir tartışma, bir ülkenin dış politikadaki kararları gibi durumlar, oyun teorisinin alanına girer. Oyun teorisi, stratejik düşünmenin temel ilkelerini sunar.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="645" height="396" src="https://www.halildurmus.com/wp-content/uploads/2025/01/john-nash.jpg" alt="" class="wp-image-5128" srcset="https://www.halildurmus.com/wp-content/uploads/2025/01/john-nash.jpg 645w, https://www.halildurmus.com/wp-content/uploads/2025/01/john-nash-300x184.jpg 300w" sizes="auto, (max-width: 645px) 100vw, 645px" /></figure>



<p></p>



<p>Ünlü matematikçi John Nash&#8217;in dediği gibi: &#8220;<em>Oyun oynarken ihtiyacımız olan aslında biraz matematik, biraz şizofreni.</em>&#8221; Bu yazıda, oyun teorisini teorik çerçeveden çıkarıp, günlük hayatımızdaki somut örneklerle açıklayacağız.</p>



<h4 class="wp-block-heading"><strong>Oyun Teorisi Nedir?</strong></h4>



<p>Basit bir ifadeyle, oyun teorisi karar alma süreçlerinde başkalarının davranışlarını hesaba katmayı öğretir. Her gün verdiğimiz kararların birçoğu, diğer insanların ne yapacağına bağlıdır. Örneğin, bir restoranda ne sipariş edeceğinize karar verirken, yan masadaki insanların yemek seçimleri bile sizin tercihinizi etkileyebilir. İşte bu, oyun teorisinin temelidir.</p>



<h5 class="wp-block-heading">Günlük Hayattan Örnekler</h5>



<ol class="wp-block-list">
<li><strong>Trafik Işığında Beklemek:</strong> Sabah işe giderken kırmızı ışıkta beklerken, diğer sürücülerin davranışlarını tahmin etmeye çalışırız. Birçok kişi aynı anda yeşil ışıkta hareket etmeyi beklediği için, kimin önce hareket edeceği yazılı olmayan kurallara göre belirlenir. Bu, bir çeşit stratejik karar alma sürecidir. <br>                                                                                                                                                                                        <img decoding="async" src="https://www.halildurmus.com/wp-content/uploads/2025/01/Trafik-Isiginda-Beklemek.jpg" alt="">   <br>  </li>



<li>   <strong>Market Alışverişi:</strong> Market indirimlerinde genellikle sınırlı stok olur. Bir ürünün tükenme riski varsa, insanlar bu ürün için yarışmaya başlar. Diğer müşterilerin kararlarını göz önünde bulundurup, alacağınız ürünleri belirlemek tam anlamıyla bir oyun teorisi problemidir.</li>



<li><strong>Sosyal Medya Paylaşımları:</strong> Bir paylaşım yaparken, takipçilerinizin nasıl tepki vereceğini düşünürsünüz. Beğeni ve yorumlar, stratejik bir şekilde planlanan gönderilerin sonucudur. Bu süreçte, oyun teorisinin &#8220;başkalarının davranışlarını tahmin etme&#8221; prensibini kullanırsınız.</li>
</ol>



<h4 class="wp-block-heading">Eğlenceli Bir Oyun Teorisi Deneyimi</h4>



<p>Bir arkadaş grubuyla dışarı çıkmayı planladığınızı düşünün. Nereye gideceğinize karar vermek, herkesin tercihlerini göz önünde bulundurmayı gerektirir. Eğer grup üyelerinden biri sürekli olarak pizzayı öneriyorsa, bu kişi ile diğerlerinin nasıl uzlaşacağını görmek, ilginç bir oyun teorisi çalışmasıdır. Burada, Nash’in &#8220;şizofreni&#8221; vurgusu devreye girer. Farklı perspektifleri aynı anda değerlendirip en uygun stratejiyi bulmak gereklidir.</p>



<h4 class="wp-block-heading">Oyun Teorisinin İş Hayatındaki Rolü</h4>



<p>İş dünyasında oyun teorisi, rekabetçi bir ortamda başarılı olmak için önemli bir araçtır. Örneğin, iki büyük şirketin aynı zamanda yeni bir ürün piyasaya sürdüğünü düşünün. Her iki şirket de fiyatlandırma ve pazarlama stratejilerini belirlerken rakibinin hamlesini tahmin etmeye çalışır. Yanlış bir tahmin, ciddi kayıplara yol açabilir.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="700" height="700" src="https://www.halildurmus.com/wp-content/uploads/2025/01/Oyun-Teorisinin-Is-Dunyasindaki-Rolu-.jpg" alt="" class="wp-image-5134" srcset="https://www.halildurmus.com/wp-content/uploads/2025/01/Oyun-Teorisinin-Is-Dunyasindaki-Rolu-.jpg 700w, https://www.halildurmus.com/wp-content/uploads/2025/01/Oyun-Teorisinin-Is-Dunyasindaki-Rolu--300x300.jpg 300w, https://www.halildurmus.com/wp-content/uploads/2025/01/Oyun-Teorisinin-Is-Dunyasindaki-Rolu--150x150.jpg 150w" sizes="auto, (max-width: 700px) 100vw, 700px" /></figure>



<p></p>



<p>Sonuç olarak, oyun teorisini yalnızca akademik bir alan değil, hayatın her alanında kullanılan bir strateji kılavuzudur. Günlük kararlarımızdan iş hayatındaki büyük stratejilere kadar her yerde oyun teorisinin izlerini görebiliriz. Bu nedenle, oyun teorisinin temel prensiplerini anlamak önemlidir. Bu, hem bireysel hem de profesyonel hayatta daha iyi kararlar almayı sağlar.</p>



<p><strong>Kaynakça:</strong> <a href="https://www.princeton.edu/news/2015/05/27/tragic-meaningful-life-legendary-princeton-mathematician-john-nash-dies?section=featured"><strong>princeton</strong></a>, <strong><a href="https://tr.wikipedia.org/wiki/Oyun_teorisi#:~:text=Oyun%20teorisi%2C%20sosyal%20kelimesinin%20geni%C5%9F,kuram%C4%B1%20veya%20bir%20t%C3%BCr%20%C5%9Femsiyedir.">wikipedia</a></strong></p>



<p></p>



<p></p>
<p>The post <a href="https://www.halildurmus.com/2025/07/16/oyun-teorisi-gunluk-hayatimizdaki-stratejik-kararlar/">Oyun Teorisi: Günlük Hayatımızdaki Stratejik Kararlar</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2025/07/16/oyun-teorisi-gunluk-hayatimizdaki-stratejik-kararlar/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cursor &#8211; AI Code Editor: Yapay Zeka Destekli Kodlama Deneyimi</title>
		<link>https://www.halildurmus.com/2025/03/17/cursor-ai-code-editor-yapay-zeka-destekli-kodlama-deneyimi/</link>
					<comments>https://www.halildurmus.com/2025/03/17/cursor-ai-code-editor-yapay-zeka-destekli-kodlama-deneyimi/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Mon, 17 Mar 2025 05:00:00 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Teknoloji]]></category>
		<category><![CDATA[#AI Kod Editörü]]></category>
		<category><![CDATA[#Kod Refaktoring]]></category>
		<category><![CDATA[#Verimli Kodlama]]></category>
		<category><![CDATA[#Yapay Zeka Geliştirme]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=5093</guid>

					<description><![CDATA[<p>Yazılım geliştirme süreci, zamanla daha karmaşık hale geldiği için, geliştiriciler verimliliklerini artırabilecek araçlara büyük ihtiyaç duyuyor. Bu noktada, Cursor &#8211; AI Code Editor devreye giriyor. Yapay zeka destekli kod editörü olan Cursor, geliştiricilere hız kazandırmanın yanı sıra, hataları minimize etmek ve kod yazma süreçlerini daha verimli hale getirmek için birçok yeni özellik sunuyor. Peki, Cursor [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2025/03/17/cursor-ai-code-editor-yapay-zeka-destekli-kodlama-deneyimi/">Cursor &#8211; AI Code Editor: Yapay Zeka Destekli Kodlama Deneyimi</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Yazılım geliştirme süreci, zamanla daha karmaşık hale geldiği için, geliştiriciler verimliliklerini artırabilecek araçlara büyük ihtiyaç duyuyor. Bu noktada, <strong>Cursor &#8211; AI Code Editor</strong> devreye giriyor. <a href="https://www.halildurmus.com/2021/03/15/yapay-zeka-nedir-ne-icin-kullanilir-tehlikeli-mi/">Yapay zeka</a> destekli kod editörü olan Cursor, geliştiricilere hız kazandırmanın yanı sıra, hataları minimize etmek ve kod yazma süreçlerini daha verimli hale getirmek için birçok yeni özellik sunuyor. Peki, Cursor tam olarak nedir ve ne gibi avantajlar sunar?</p>



<h4 class="wp-block-heading">Cursor Nedir?</h4>



<p>Cursor, geliştiricilerin daha hızlı ve verimli bir şekilde yazılım geliştirmelerini sağlayan bir <strong>yapay zeka destekli kod editörü</strong>dür. Geleneksel IDE&#8217;lerin (Entegre Geliştirme Ortamları) sunduğu temel özelliklerin ötesinde, Cursor yapay zeka ve makine öğrenimi algoritmaları kullanarak kod yazma deneyimini bir adım öteye taşıyor. Özellikle yazılım geliştirme süreçlerinde zaman kaybını azaltmak ve hataları minimize etmek amacıyla, geliştiricilere yardımcı olan bir dizi özellik sunuyor.</p>



<h4 class="wp-block-heading">Cursor’un Temel Özellikleri</h4>



<p>1. <strong>Yapay Zeka ile Kod Tamamlama</strong></p>



<p>Geleneksel otomatik tamamlama özelliklerinin çok ötesine geçiyor. Yapay zeka, yazdığınız koda göre bağlamı anlayarak size en uygun kod parçalarını önerir. Bu sayede, kod yazarken daha hızlı ilerlersiniz ve doğru çözümler üretmek için fazla düşünmenize gerek kalmaz.</p>



<p>2. <strong>Kod Düzenleme ve Refaktoring</strong></p>



<p>Yapay zeka, kodunuzdaki tekrar eden ve karmaşık bölümleri analiz eder. Bu analizlere dayanarak, kodunuzu daha okunabilir, sürdürülebilir ve verimli hale getirecek düzenlemeler önerir. Refaktoring önerileri, geliştirme sürecinde yapılacak küçük iyileştirmelerle büyük zaman tasarrufları sağlar.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="477" src="https://www.halildurmus.com/wp-content/uploads/2024/12/Cursor_Hd.png" alt="" class="wp-image-5096" srcset="https://www.halildurmus.com/wp-content/uploads/2024/12/Cursor_Hd.png 800w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cursor_Hd-300x179.png 300w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cursor_Hd-768x458.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p></p>



<p>3. <strong>Hata Tespiti ve Düzeltme</strong></p>



<p>Cursor, yazdığınız kodu sürekli olarak tarar ve hata veya potansiyel sorunları erken aşamada tespit eder. Hem sözdizimsel hem de mantıksal hataları bulmak için yapay zeka algoritmalarını kullanır ve hataların nasıl düzeltileceği konusunda önerilerde bulunur.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="727" src="https://www.halildurmus.com/wp-content/uploads/2024/12/Hata_Ayiklama_Cursor.png" alt="" class="wp-image-5109" srcset="https://www.halildurmus.com/wp-content/uploads/2024/12/Hata_Ayiklama_Cursor.png 800w, https://www.halildurmus.com/wp-content/uploads/2024/12/Hata_Ayiklama_Cursor-300x273.png 300w, https://www.halildurmus.com/wp-content/uploads/2024/12/Hata_Ayiklama_Cursor-768x698.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p></p>



<p>4. <strong>Kod Anlamlandırma ve Yorumlama</strong></p>



<p>Cursor, yazdığınız kodu daha iyi anlamanızı sağlayacak özellikler sunar. Karmaşık algoritmaların işleyişi ve fonksiyonların görevleri hakkında kısa açıklamalar sunarak kodunuzu daha kolay anlamanızı sağlar. Bu, özellikle yeni başlayanlar veya büyük projelerde çalışan geliştiriciler için büyük bir avantajdır.</p>



<p>5. <strong>Doğal Dil ile Kod Yazma</strong></p>



<p><strong>Cursor</strong>, doğal dil işleme (NLP) kullanarak metin tabanlı komutlarla kod yazmanıza yardımcı olur. Örneğin, &#8220;Bir listeyi tersten sıralayan bir fonksiyon yaz&#8221; komutunu verdiğinizde, Cursor uygun kodu oluşturur.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="564" src="https://www.halildurmus.com/wp-content/uploads/2024/12/Cusor-Kod-Tabanli-Sohbet-1024x564.png" alt="" class="wp-image-5110" srcset="https://www.halildurmus.com/wp-content/uploads/2024/12/Cusor-Kod-Tabanli-Sohbet-1024x564.png 1024w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cusor-Kod-Tabanli-Sohbet-300x165.png 300w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cusor-Kod-Tabanli-Sohbet-768x423.png 768w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cusor-Kod-Tabanli-Sohbet-1536x846.png 1536w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cusor-Kod-Tabanli-Sohbet-810x446.png 810w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cusor-Kod-Tabanli-Sohbet-1140x628.png 1140w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cusor-Kod-Tabanli-Sohbet.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>6. <strong>Entegre Çalışma Alanı ve Çoklu Dil Desteği</strong></p>



<p>Cursor, birçok farklı programlama dilini destekler. Python, JavaScript, Java, C++, HTML/CSS gibi popüler dillerde gelişmiş özellikler sunar. Ayrıca, farklı dillerdeki projeleri aynı anda yönetmek için entegre bir çalışma alanı sağlar.</p>



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



<p>1. <strong>Zaman Kazanımı</strong></p>



<p>Yapay zeka, kod yazma sürecini büyük ölçüde hızlandırır. Otomatik tamamlama, hata düzeltme ve kod önerileri sayesinde, geliştiriciler daha az zaman harcarak daha fazla iş yapabilirler. Bu, özellikle yoğun projelerde zaman tasarrufu sağlar.</p>



<p>2. <strong>Yazılım Hatalarının Azaltılması</strong></p>



<p>Yapay zeka algoritmaları, olası yazılım hatalarını ve güvenlik açıklarını tespit etmek için sürekli analiz yapar. Bu, özellikle hata yapma olasılığını azaltarak, geliştiricilerin hatalarını daha erken aşamalarda fark etmelerini sağlar.</p>



<p>3. <strong>Daha Verimli Kodlama</strong></p>



<p>Cursor, kod yazma sürecinde yalnızca hata tespiti yapmaz, aynı zamanda daha verimli ve temiz kod yazmanıza yardımcı olacak refaktoring önerileri de sunar. Bu, yazılımın sürdürülebilirliğini artırır.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="760" src="https://www.halildurmus.com/wp-content/uploads/2024/12/Gelismis-Kod-Kalitesi.png" alt="" class="wp-image-5112" srcset="https://www.halildurmus.com/wp-content/uploads/2024/12/Gelismis-Kod-Kalitesi.png 800w, https://www.halildurmus.com/wp-content/uploads/2024/12/Gelismis-Kod-Kalitesi-300x285.png 300w, https://www.halildurmus.com/wp-content/uploads/2024/12/Gelismis-Kod-Kalitesi-768x730.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p></p>



<p>4. <strong>Öğrenme ve Gelişim</strong></p>



<p>Yeni başlayanlar için Cursor, anlamlı kod önerileri ve açıklamalar sunarak öğrenmeyi hızlandırır. Ayrıca, daha deneyimli geliştiriciler için de daha hızlı çözüm üretme ve daha az deneme-yanılma yapma imkanı sağlar.</p>



<p>5. <strong>Çoklu Platform Desteği</strong></p>



<p>Cursor, bulut tabanlı bir uygulama olduğundan, farklı cihazlar ve işletim sistemlerinde kullanılabilir. Bu, geliştiricilerin projelerine her yerden erişebilmesini ve her zaman güncel kalabilmesini sağlar.</p>



<h4 class="wp-block-heading">Cursor&#8217;un Hedef Kitlesi</h4>



<p>Cursor, geniş bir kullanıcı kitlesine hitap etmektedir. Özellikle:</p>



<ul class="wp-block-list">
<li><strong>Yeni Başlayan Geliştiriciler</strong>: Kod yazma sürecinde rehberlik ve anında geri bildirim sağlamak, başlangıç seviyesindeki geliştiriciler için büyük bir avantajdır.</li>



<li><strong>Deneyimli Yazılım Geliştiricileri</strong>: Hızlı prototipleme ve geliştirme sürecinde verimlilik sağlayan özellikler, deneyimli geliştiricilerin işini kolaylaştırır.</li>



<li><strong>Takımlar ve İşbirlikçi Projeler</strong>: Birden fazla geliştiriciyle yapılan projelerde, yapay zeka desteğiyle uyumlu bir şekilde çalışmak, takımların koordinasyonunu artırır.</li>
</ul>



<h4 class="wp-block-heading">Oluşturuluş Hikayesi</h4>



<p>Cursor AI , Michael Truell, Sualeh Asif, Arvid Lunnemark ve Aman Sanger tarafından  kurulan&nbsp;Anysphere&#8217;den geliyor.&nbsp;OpenAI Startup Fund&#8217;dan&nbsp;8 milyon dolar tohum finansmanı topladılar&nbsp;.</p>



<p>Bu sadece profesyoneller için değil. Cloudflare&#8217;de geliştirici ilişkileri başkan yardımcısı olan Ricky Robinett şunları paylaştı :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>&#8220;Sekiz yaşındaki kızım Cursor AI&#8217;yı kullanarak sadece 45 dakikada bir sohbet robotu geliştirdi.&#8221;</p>
</blockquote>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="967" src="https://www.halildurmus.com/wp-content/uploads/2024/12/Cursor.png" alt="" class="wp-image-5106" srcset="https://www.halildurmus.com/wp-content/uploads/2024/12/Cursor.png 800w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cursor-248x300.png 248w, https://www.halildurmus.com/wp-content/uploads/2024/12/Cursor-768x928.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p></p>



<p>Büyük isimler de bunu kullanıyor. Samsung, Replicate, Midjourney, Shopify ve Perplexity&#8217;deki mühendisler de bu işe dahil oldu. </p>



<p>Figma&#8217;dan Jordan Singer durumu şöyle özetledi:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#8220;Claude + Cursor ve aklınıza koyduğunuz her şeyi inşa edebilme yeteneği hakkında tüm bu konuşmalar (beceri setiniz ne olursa olsun) haklı. Eğer gelecek buysa, içinde yaşamak istiyorum.&#8221;</em></p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p></p>
</blockquote>



<h4 class="wp-block-heading">Gizlilik ve Güvenlik Hususları</h4>



<p>Günümüzün veri odaklı dünyasında gizlilik ve güvenlik, geliştiriciler için en önemli endişelerdir. Cursor AI, kullanıcı verilerini korumanın önemini kabul eder ve hassas bilgilerin gizliliğini ve bütünlüğünü sağlamak için sağlam önlemler uygulamıştır.</p>



<p><strong>Veri İşleme Uygulamaları</strong></p>



<p>Cursor AI&#8217;nın gizlilik uygulamalarının ardındaki temel ilkelerden biri veri ifşasını en aza indirmektir. AI özellikleri kullanıldığında,&nbsp;işlenmek üzere buluta yalnızca&nbsp;<strong>küçük kod parçacıkları (100-300 satır) gönderilir. Bu, tescilli algoritmalar veya ticari sırlar gibi hassas bilgilerin korunmasını sağlar.</strong></p>



<p><strong>Gizlilik Modları ve Sertifikalar</strong></p>



<p>Veri güvenliğini daha da artırmak için Cursor AI,&nbsp;kodun sunucularda depolanmasını engelleyen bir&nbsp;<strong>Gizlilik </strong>Modu sunar. Bu, aracı kullanmayı bıraktıktan sonra bile kodunuzun özel ve gizli kalacağı anlamına gelir. Ayrıca, Cursor AI, veri güvenliği ve gizlilik en iyi uygulamalarına olan bağlılığını gösteren&nbsp;SOC 2 sertifikalıdır.</p>



<p><strong>Güvenlik Özellikleri</strong></p>



<p>Son derece hassas projeler üzerinde çalışan geliştiriciler için Cursor AI,&nbsp;Yerel/Hayalet modu&nbsp;sağlar . Bu mod, buluta herhangi bir kod göndermeden Cursor AI&#8217;yı çevrimdışı kullanmanıza olanak tanır. Bu, en yüksek gizlilik seviyesini gerektiren projeler için ekstra bir güvenlik katmanı sağlar.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="700" height="303" src="https://www.halildurmus.com/wp-content/uploads/2024/12/security-software.jpg" alt="" class="wp-image-5111" srcset="https://www.halildurmus.com/wp-content/uploads/2024/12/security-software.jpg 700w, https://www.halildurmus.com/wp-content/uploads/2024/12/security-software-300x130.jpg 300w" sizes="auto, (max-width: 700px) 100vw, 700px" /></figure>



<p></p>



<p><strong>Cursor AI</strong>, kullanıcı gizliliğini ön planda tutar ve güçlü güvenlik önlemleri uygular. Böylece geliştiriciler, hassas bilgilerinin güvende olduğunu bilerek güvenle çalışabilirler.</p>



<p>Cursor &#8211; AI Code Editor, yazılım geliştirme sürecinde verimliliği artıran, hata oranını düşüren ve geliştiricilere rehberlik eden güçlü bir araçtır. Yapay zeka destekli özellikleriyle kod yazmayı daha hızlı, verimli ve hatasız hale getirir. İster yeni başlayan ister deneyimli bir yazılım geliştiricisi olun, Cursor, size zaman kazandırarak yazılım geliştirme sürecini daha verimli ve etkili hale getirmenize yardımcı olabilir. Böylece, hem öğrenme sürecinizi hızlandırır hem de projelerinizde daha hızlı ilerlersiniz.</p>



<p><strong>Kaynakça: <a href="https://www.cursor.com/">Cursor</a></strong>, <a href="https://webrazzi.com/2023/10/12/anysphere-openai-yatirim/">Webrazzi</a>, <a href="https://refined.so/glossary/cursor-composer">Refined</a></p>
<p>The post <a href="https://www.halildurmus.com/2025/03/17/cursor-ai-code-editor-yapay-zeka-destekli-kodlama-deneyimi/">Cursor &#8211; AI Code Editor: Yapay Zeka Destekli Kodlama Deneyimi</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2025/03/17/cursor-ai-code-editor-yapay-zeka-destekli-kodlama-deneyimi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Zeigarnik Etkisi: Bitmemiş Görevlerin Bellek Üzerindeki Etkisi</title>
		<link>https://www.halildurmus.com/2025/02/24/zeigarnik-etkisi-bitmemis-gorevlerin-bellek-uzerindeki-etkisi/</link>
					<comments>https://www.halildurmus.com/2025/02/24/zeigarnik-etkisi-bitmemis-gorevlerin-bellek-uzerindeki-etkisi/#respond</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Mon, 24 Feb 2025 05:00:00 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Yaşam]]></category>
		<category><![CDATA[Bellek-ve-motivasyon]]></category>
		<category><![CDATA[Görev-yönetimi]]></category>
		<category><![CDATA[Verimli-çalışma]]></category>
		<category><![CDATA[Zeigarnik-etkisi]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=4896</guid>

					<description><![CDATA[<p>Birçok insan, günlük yaşamda birden fazla görevle meşgul olur. Bazılarını tamamlarız, bazılarını ise tamamlamadan bırakırız. Tamamlanmamış görevlerin zihnimizde yer ettiğini ve bizi rahatsız ettiğini fark etmişsinizdir. İşte bu durumun psikolojik bir fenomeni olan &#8220;Zeigarnik Etkisi&#8221; devreye girer. Bu makalede, Zeigarnik Etkisi&#8217;nin tanımı, tarihi, açıklaması ve gerçek hayattaki uygulamaları incelenecektir. Zeigarnik etkisi, insanların tamamlanmamış görevlerin veya [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2025/02/24/zeigarnik-etkisi-bitmemis-gorevlerin-bellek-uzerindeki-etkisi/">Zeigarnik Etkisi: Bitmemiş Görevlerin Bellek Üzerindeki Etkisi</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Birçok insan, günlük yaşamda birden fazla görevle meşgul olur. Bazılarını tamamlarız, bazılarını ise tamamlamadan bırakırız. Tamamlanmamış görevlerin zihnimizde yer ettiğini ve bizi rahatsız ettiğini fark etmişsinizdir. İşte bu durumun psikolojik bir fenomeni olan &#8220;Zeigarnik Etkisi&#8221; devreye girer. Bu makalede, Zeigarnik Etkisi&#8217;nin tanımı, tarihi, açıklaması ve gerçek hayattaki uygulamaları incelenecektir.</p>



<p>Zeigarnik etkisi, insanların tamamlanmamış görevlerin veya işlerin, tamamlananlara kıyasla daha fazla bellek izleri bıraktığı ve daha fazla düşünceye neden olduğu psikolojik bir fenomendir. Bu etki, Sovyet psikolog Bluma Zeigarnik tarafından 1920&#8217;lerde keşfedilmiştir.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="350" src="https://www.halildurmus.com/wp-content/uploads/2023/07/Bluma-Zeigarnik.jpg" alt="" class="wp-image-4930" srcset="https://www.halildurmus.com/wp-content/uploads/2023/07/Bluma-Zeigarnik.jpg 750w, https://www.halildurmus.com/wp-content/uploads/2023/07/Bluma-Zeigarnik-300x140.jpg 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<p></p>



<p>Zeigarnik etkisi, bir görevin tamamlanmadığı durumlarda, zihnimizin bu görevle ilgili bilgileri ve detayları hatırlama eğilimi gösterdiğini ileri sürer. Örneğin, bir ödevi tamamlamadan bıraktığınızda veya bir işi bitirmeden önce mola verdiğinizde, zihninizi sürekli olarak o tamamlanmamış göreve geri getirme eğilimi gösterirsiniz. Bu durumda, ara verme ve dinlenme süreçleri, tamamlanmamış görevlerin zihninizi meşgul etmesini engellemek ve daha iyi odaklanmanızı sağlamak için önemli bir rol oynar. Bu, beyin tarafından tamamlanmamış görevin hala önemli olduğu ve tamamlanması gerektiği mesajını iletmek için kullanılan bir mekanizmadır.</p>



<p>Zeigarnik etkisi, tamamlanmamış görevlerin insanların dikkatini çekmeye ve onları motive etmeye devam ettiği fikrini destekler. Tamamlanmamış görevler, bir tür &#8220;beyin gerilimi&#8221; yaratır ve insanlar bu gerilimi ortadan kaldırmak için görevi tamamlamak veya sonuca ulaşmak için çaba harcamaya yönlendirilir. Bu etki, bir görevin tamamlanmasının duygusal tatmin ve rahatlama sağlayabileceğini düşündürür.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="421" src="https://www.halildurmus.com/wp-content/uploads/2023/07/Zeigarnik-Etkisi.jpg" alt="" class="wp-image-4939" srcset="https://www.halildurmus.com/wp-content/uploads/2023/07/Zeigarnik-Etkisi.jpg 750w, https://www.halildurmus.com/wp-content/uploads/2023/07/Zeigarnik-Etkisi-300x168.jpg 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<p></p>



<p>Zeigarnik Etkisi, tamamlanmamış görevlerin bellek üzerindeki etkisini açıklayan bir fenomendir. Tamamlanmamış görevler, zihnimizde daha fazla yer tutar ve bizim üzerinde çalışmamızı gerektiren bir &#8220;beyin gerilimi&#8221; yaratır. Bu etki, pazarlama, eğitim ve diğer birçok alanda uygulanabilir ve insan davranışlarını etkileyebilir.</p>



<h3 class="wp-block-heading">Zeigarnik Etkisi, zihinsel süreçlerimizi anlamak ve daha verimli çalışmak için neler yapabiliriz?</h3>



<p>Zeigarnik Etkisi&#8217;nden yararlanarak zihinsel süreçlerimizi anlamak ve daha verimli çalışmak için aşağıdaki yöntemleri deneyebilirsiniz:</p>



<p> <strong>1. Görevleri parçalara ayırma</strong>: Büyük ve karmaşık görevleri küçük parçalara bölerek daha kolay yönetilebilir hale getirebilirsiniz. Tamamlanmamış bir görevi hatırlamak ve üzerinde çalışmak için daha kolay bir hedef belirlemek, Zeigarnik Etkisi&#8217;nin zihninizi motive etmesine yardımcı olabilir.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="650" height="400" src="https://www.halildurmus.com/wp-content/uploads/2023/07/Zeigarnik-Etkisi-1.jpg" alt="" class="wp-image-4934" srcset="https://www.halildurmus.com/wp-content/uploads/2023/07/Zeigarnik-Etkisi-1.jpg 650w, https://www.halildurmus.com/wp-content/uploads/2023/07/Zeigarnik-Etkisi-1-300x185.jpg 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>



<p></p>



<p><strong>2. Görevleri not alma</strong>: Tamamlanmamış görevleri not almak, zihninizi görevlerle meşgul etmek yerine bilgileri dışarı aktarmanıza yardımcı olur. Bu, zihninizi rahatlatır ve daha fazla odaklanmanıza olanak tanır.</p>



<p></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="421" src="https://www.halildurmus.com/wp-content/uploads/2023/07/not-tutma.jpg" alt="" class="wp-image-4932" srcset="https://www.halildurmus.com/wp-content/uploads/2023/07/not-tutma.jpg 750w, https://www.halildurmus.com/wp-content/uploads/2023/07/not-tutma-300x168.jpg 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<p></p>



<p><strong>3.</strong> <strong>Önceliklendirme</strong>: Tamamlanması gereken görevleri önceliklendirerek, Zeigarnik Etkisi&#8217;nin stres yaratmasını engelleyebilirsiniz. Öncelikli görevlere odaklanarak, tamamlanmamış görevlerin baskısı altında kalmadan daha verimli çalışabilirsiniz.</p>



<p><strong>4.</strong> <strong>Araştırma ve öğrenme süreci</strong>: Zeigarnik Etkisi, öğrenme sürecinde de kullanılabilir. Öğrenmek istediğiniz konuları veya bilgileri parçalara bölerek öğrenme sürecini daha etkili hale getirebilirsiniz. Tamamlanmamış öğrenme süreci, bilgilerin uzun süreli bellekte kalmasına ve daha iyi anlaşılmasına yardımcı olabilir.</p>



<p><strong>5.</strong> <strong>Ara verme ve dinlenme</strong>: Zeigarnik Etkisi, ara verme ve dinlenme süreçlerinde de rol oynar. Tamamlanmamış görevler zihninizi meşgul edebilir ve sürekli düşünme halinde olmanıza neden olabilir. Ara vermek ve dinlenmek, zihninizi rahatlatarak daha iyi odaklanmanızı sağlar.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="486" src="https://www.halildurmus.com/wp-content/uploads/2023/07/dinlenme.jpg" alt="" class="wp-image-4933" srcset="https://www.halildurmus.com/wp-content/uploads/2023/07/dinlenme.jpg 750w, https://www.halildurmus.com/wp-content/uploads/2023/07/dinlenme-300x194.jpg 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<p></p>



<p><strong>6.</strong> <strong>Görevlerin tamamlanmasını sağlama</strong>: Zeigarnik Etkisi&#8217;nin olumsuz etkilerinden kurtulmak için görevleri tamamlamaya odaklanmak önemlidir. Tamamlanmış görevler, zihinde daha az yer kaplar ve daha az stres yaratır. Görevlerin tamamlanmasını sağlamak için zaman yönetimi becerilerini geliştirmek, öncelikleri belirlemek ve kendinizi motive etmek önemlidir.</p>



<p></p>



<p>Sonuç olarak, Zeigarnik Etkisi&#8217;nden yararlanarak zihinsel süreçlerinizi daha iyi anlayabilir ve daha verimli çalışabilirsiniz. Görevleri parçalara ayırarak, not alarak, önceliklendirerek, araştırarak ve öğrenerek Zeigarnik Etkisi&#8217;nden faydalanabilirsiniz. Ayrıca, ara verme ve dinlenme süreçlerini kullanarak görevlerin tamamlanmasını sağlayabilirsiniz. Bu şekilde, zihninizi daha iyi yönetebilir ve daha etkili bir şekilde çalışabilirsiniz.</p>



<p>Kaynakça: <a href="https://evrimagaci.org/zeigarnik-etkisi-tamamlamadiginiz-isleri-ve-bitirmediginiz-gorevleri-neden-daha-sik-hatirliyorsunuz-9439" target="_blank" rel="noreferrer noopener">Evrimagaci</a>, <a href="https://www.verywellmind.com/zeigarnik-effect-memory-overview-4175150" target="_blank" rel="noreferrer noopener">verywellmind</a>, <a href="https://www.moneythor.com/2021/05/05/the-zeigarnik-effect-behavioural-science-in-banking/" target="_blank" rel="noreferrer noopener">moneythor</a></p>
<p>The post <a href="https://www.halildurmus.com/2025/02/24/zeigarnik-etkisi-bitmemis-gorevlerin-bellek-uzerindeki-etkisi/">Zeigarnik Etkisi: Bitmemiş Görevlerin Bellek Üzerindeki Etkisi</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2025/02/24/zeigarnik-etkisi-bitmemis-gorevlerin-bellek-uzerindeki-etkisi/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>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>Ş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><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></p>



<p><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><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>Ş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><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></p>



<p><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>Ş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>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></p>



<p><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>Yaşam ve Ölüm: İnsanın Anlam Arayışı</title>
		<link>https://www.halildurmus.com/2024/11/23/yasam-ve-olum-insanin-anlam-arayisi/</link>
					<comments>https://www.halildurmus.com/2024/11/23/yasam-ve-olum-insanin-anlam-arayisi/#comments</comments>
		
		<dc:creator><![CDATA[Halil Durmuş]]></dc:creator>
		<pubDate>Sat, 23 Nov 2024 11:52:44 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Yaşam]]></category>
		<category><![CDATA[Bilimsel]]></category>
		<category><![CDATA[Din]]></category>
		<category><![CDATA[Felsefi]]></category>
		<guid isPermaLink="false">https://www.halildurmus.com/?p=4955</guid>

					<description><![CDATA[<p>İnsanoğlu varoluşunun ilk anlarından itibaren, yaşamın anlamını sorgulamış, ölümün gizemine dair düşüncelere dalıp çıkmış bir varlık olmuştur. Bu evrensel sorular, insanın bilinci ve sezgisiyle derinlemesine etkileşim içerisindedir. Yaşam ve ölüm kavramları, insanların düşüncelerini, inançlarını ve kültürel yapılarını şekillendiren temel taşlardır. Bu makalede, insanın yaşam ve ölümle ilgili anlam arayışını derinlemesine inceleyeceğiz. Yaşamın Anlamı: İçsel Keşif [&#8230;]</p>
<p>The post <a href="https://www.halildurmus.com/2024/11/23/yasam-ve-olum-insanin-anlam-arayisi/">Yaşam ve Ölüm: İnsanın Anlam Arayışı</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>İnsanoğlu varoluşunun ilk anlarından itibaren, yaşamın anlamını sorgulamış, ölümün gizemine dair düşüncelere dalıp çıkmış bir varlık olmuştur. Bu evrensel sorular, insanın bilinci ve sezgisiyle derinlemesine etkileşim içerisindedir. Yaşam ve ölüm kavramları, insanların düşüncelerini, inançlarını ve kültürel yapılarını şekillendiren temel taşlardır. Bu makalede, insanın yaşam ve ölümle ilgili anlam arayışını derinlemesine inceleyeceğiz.</p>



<h4 class="wp-block-heading">Yaşamın Anlamı: İçsel Keşif ve Amaç</h4>



<p>İnsanlar, yaşamın anlamını bulma çabası içinde çeşitli yollar izlerler. Kimi insanlar içsel bir keşif süreciyle, kendi duygularını, tutkularını ve yeteneklerini keşfederek yaşamlarına anlam katmaya çalışır. Bu yaklaşım, kişinin kendini gerçekleştirmesine ve içsel tatmin bulmasına olanak tanır. Birçok kişi, ahlaki değerlerini ve önceliklerini belirleyerek yaşamlarını anlamlandırır. Başkalarına yardım etmek, toplumsal sorumluluklarını yerine getirmek ve olumlu bir iz bırakmak gibi hedefler, yaşamın anlamını bulma yolunda rehberlik edebilir.</p>



<h4 class="wp-block-heading">Kültürel ve Dini Perspektifler: Ölümün Anlamı</h4>



<p>Ölüm, insanlık tarihinde derin bir etki bırakan ve çeşitli inanç sistemlerini şekillendiren bir kavramdır. Farklı kültürler, ölümü farklı şekillerde anlamlandırır ve bu anlamları ritüeller, semboller ve hikayeler aracılığıyla ifade ederler. Bazı dinler, ölümün bir geçiş olduğuna, ruhun başka bir boyuta veya yaşama doğru ilerlediğine inanır. Ölüm, bu bakış açılarına göre yeni bir başlangıç veya ödül olarak kabul edilir.</p>



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



<p></p>



<h4 class="wp-block-heading">Felsefi Düşünceler: Varoluşçu ve Deterministik Görüşler</h4>



<p>Felsefe, yaşamın anlamı ve ölümün anlamı konularında derinlemesine düşünceler sunar. Varoluşçuluk, bireyin özgür iradesini ve kişisel sorumluluğunu vurgulayarak yaşamın anlamını bireysel tercihlere bağlar. Bu görüşe göre, insanlar kendi yaşamlarına anlam katarlar ve ölümün kaçınılmazlığına rağmen yaşamın anlamını kendileri oluştururlar. Diğer yandan, deterministik görüşler yaşamın ve ölümün bir kaderin sonucu olduğunu öne sürer. Bu bakış açısına göre, insanlar hayatlarını önceden belirlenmiş bir yolda sürdürürler ve ölüm de bu sürecin doğal bir sonucudur.</p>



<h4 class="wp-block-heading">Bilimsel Perspektif: Evrimsel ve Biyolojik Anlam</h4>



<p>Bilim, yaşamın ve ölümün anlamına dair farklı bir perspektif sunar. Evrimsel biyoloji, yaşamın amacının türlerin varlığını sürdürmek ve adapte olmak olduğunu öne sürer. Bu görüşe göre, yaşamın anlamı türlerin hayatta kalma ve nesillerini sürdürme çabasında yatar. Ölüm ise bir organizmanın yaşam döngüsünün bir parçasıdır ve yerine yenilerinin gelmesine olanak tanır.</p>



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



<p></p>



<h4 class="wp-block-heading">Sonuç: Anlamın Arayışı</h4>



<p>Yaşam ve ölüm, insanın düşünce dünyasının merkezinde yer alır. İnsanlar, bireysel, kültürel, dini, felsefi ve <a href="https://www.halildurmus.com/category/bilimsel/" target="_blank" rel="noreferrer noopener">bilimsel</a> bakış açılarıyla bu kavramlara anlam katmaya çalışırlar. Anlam arayışı, insanın varoluşsal bir gereksinimi olarak ortaya çıkar ve yaşamın anlamını bulma çabası, insanın kimliğini ve değerlerini şekillendiren önemli bir süreçtir.<br>Ancak yaşamın ve ölümün anlamı kişisel ve öznel bir deneyimdir. Her birey, bu anlamı kendi yaşam deneyimine, inançlarına ve değerlerine göre şekillendirir. Bu yüzden anlam arayışı sürekli bir yolculuktur ve insanlar yaşamlarını anlamlı kılmak için çeşitli yolları deneyimlemeye devam ederler.<br>Yaşamın ve ölümün anlamı, içsel deneyimlerden, dış etkilerden ve kültürel etkileşimlerden kaynaklanan karmaşık bir konsepttir. Her bireyin anlam arayışını saygıyla karşılamak önemlidir.</p>
<p>The post <a href="https://www.halildurmus.com/2024/11/23/yasam-ve-olum-insanin-anlam-arayisi/">Yaşam ve Ölüm: İnsanın Anlam Arayışı</a> appeared first on <a href="https://www.halildurmus.com">Halil Durmus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.halildurmus.com/2024/11/23/yasam-ve-olum-insanin-anlam-arayisi/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
