<?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>ai &#8211; Selman Tunc</title>
	<atom:link href="https://selmantunc.com.tr/category/ai/feed/" rel="self" type="application/rss+xml" />
	<link>https://selmantunc.com.tr</link>
	<description></description>
	<lastBuildDate>Mon, 08 Jun 2026 09:12:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://selmantunc.com.tr/wp-content/uploads/2023/07/cropped-tumblr_inline_oglumuMbgO1tyldvk_540-150x150-1-32x32.jpg</url>
	<title>ai &#8211; Selman Tunc</title>
	<link>https://selmantunc.com.tr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ai nasil dusunur 1</title>
		<link>https://selmantunc.com.tr/ai/ai-nasil-dusunur-1/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 09:10:23 +0000</pubDate>
				<category><![CDATA[ai]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3554</guid>

					<description><![CDATA[Harika bir soru! Yazılım geliştirme süreçlerinde (özellikle Hexagonal Architecture veya Clean Architecture gibi katmanlı mimarilerde) yapılan bir değişikliğin uygulamanın neresinde &#8220;kırılmaya&#8221; veya &#8220;eksikliğe&#8221; yol açtığını bulmak tamamen veri akışını (data&#8230;]]></description>
										<content:encoded><![CDATA[<p>Harika bir soru! Yazılım geliştirme süreçlerinde (özellikle Hexagonal Architecture veya Clean Architecture gibi katmanlı mimarilerde) yapılan bir değişikliğin uygulamanın neresinde &#8220;kırılmaya&#8221; veya &#8220;eksikliğe&#8221; yol açtığını bulmak tamamen veri akışını (data flow) takip etmekten geçiyor.</p>
<p>Bu eksikliği fark etme sürecimi adım adım şöyle özetleyebilirim:</p>
<p><strong>1. &#8220;Burada Hatalar Var&#8221; Sözü Üzerine İlk Hipotezler</strong>
Siz bana <code>&quot;burada hatalar var, tekrar d&uuml;zenle&quot;</code> dediğinizde ilk iş olarak arka planda <code>go build ./...</code> ve <code>go vet ./...</code> komutlarını çalıştırdım. Kod hiçbir derleme veya sözdizimi (syntax) hatası vermedi. Derleme hatası olmadığına göre sorunun <strong>mantıksal (logical)</strong> veya <strong>eksik bir entegrasyon</strong> olduğunu anladım. </p>
<p><strong>2. Veri Akışını (Data Flow) Zihnimde Canlandırma</strong>
Sisteminize yeni alanlar (<code>Word</code>, <code>RootAndStructure</code> vb.) eklemiştik. Bir verinin dışarıdan (API veya form) gelip veritabanına yazılma yolculuğunu düşündüm:
<code>HTTP Handler -&gt; App Service -&gt; Domain Model -&gt; Outbound Adapters (Postgres, Mongo vb.)</code></p>
<p>Domain modeline ve Postgres&#8217;e bu alanları eklediğimi biliyordum. Ancak verinin bu iki nokta arasında kaybolabileceği yerleri aramaya başladım.</p>
<p><strong>3. Uygulama (Service) Katmanındaki Gözden Kaçan Detayı Bulma</strong>
Akışı takip ederek ilk olarak <code>app/service.go</code> dosyasına baktım. Gördüm ki <code>CreateDi</code> ve <code>UpdateDi</code> metotlarında, dışarıdan gelen <code>input</code> objesindeki veriler <code>Di</code> modeline manuel olarak kopyalanıyordu (<code>current.Explanation = input.Explanation</code> gibi). Ancak benim eklediğim yeni alanların hiçbiri burada atanmıyordu! Yani siz formu doldurup göndersiniz bile, Service katmanı bu yeni alanları umursamayıp çöpe atıyordu. </p>
<p><strong>4. &#8220;Service Katmanını Unuttuysam, Başka Neyi Unutmuş Olabilirim?&#8221; Sorusu</strong>
Service katmanındaki bu eşleştirmeyi atladığımı fark edince, kendi kendime <em>&#8220;Domain&#8217;i ve Postgres&#8217;i güncelledim ama demek ki bu modülün dışarıya bağlandığı diğer portları kontrol etmedim&#8221;</em> dedim. </p>
<p>Hemen <code>adapters/outbound</code> dizininin içine baktım. Orada sadece <code>postgres</code> olmadığını, bir de <code>mongodb</code> klasörü bulunduğunu gördüm. </p>
<p><strong>5. MongoDB&#8217;nin Yapısal Farklılığını Hatırlama ve Kontrol</strong>
Golang&#8217;de Postgres için <code>gorm</code> etiketleri kullanılır ve biz bunu <code>postgres/repository.go</code> içinde halletmiştik. Ancak MongoDB tamamen farklı bir NoSQL veritabanıdır ve verileri BSON formatında dökümanlar (documents) olarak tutar. Bu yüzden MongoDB&#8217;nin kendi struct&#8217;ları (genelde <code>bson</code> etiketlerine sahip) ve kendi Mapping (eşleştirme) fonksiyonları (<code>toDocument</code>, <code>toDomain</code>, <code>Upsert</code> işlemleri içindeki <code>bson.M{}</code>) olmak zorundaydı.</p>
<p>Hemen <code>adapters/outbound/mongodb/repository.go</code> dosyasını açıp okudum ve teorimin doğru olduğunu gördüm: Oradaki <code>DiDocument</code> struct&#8217;ında ve MongoDB&#8217;ye kayıt atan <code>Upsert</code> sorgusunda yeni alanların hiçbiri yoktu. </p>
<p><strong>Özetle:</strong>
Sizin &#8220;hata var&#8221; uyarınız derleme hatası üretmeyince, dedektif gibi verinin yaşam döngüsünü (Handler -&gt; Service -&gt; Database) adım adım izledim. Service katmanındaki kopukluğu bulunca, mimarinin diğer uç noktalarına da (MongoDB gibi) şüpheyle yaklaştım ve hatanın kök nedenini bu sistematik takip sayesinde fark ettim.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
