<!-- wp:image {"id":280,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://dinamikup.com.tr/wp-content/uploads/solid-principles-trendsenfoni-alitek.jpg" alt="" class="wp-image-280"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Yazılım geliştirmede kalite, sürdürülebilirlik ve okunabilirlik denince ilk akla gelen kavramlardan biri <strong>SOLID prensipleri</strong>dir. Bu beş ilke, özellikle nesne yönelimli programlama yapan geliştiriciler için yazılım mimarisinin temel taşlarını oluşturur. Ancak bu prensiplerin gerçek projelerde nasıl uygulandığına dair net örnekler olmadan, kavramlar çoğu zaman soyut kalabilir.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"className":""} -->
<p>Bu yazıda, her bir SOLID ilkesini açıklayacak ve uygulamada karşılığı olan senaryolarla örnekleyeceğiz.</p>
<!-- /wp:paragraph -->

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

<!-- wp:heading {"className":""} -->
<h2 class="wp-block-heading">S — Single Responsibility Principle (Tek Sorumluluk İlkesi)</h2>
<!-- /wp:heading -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph {"className":""} -->
<p>“Bir sınıf sadece tek bir sorumluluğa sahip olmalı.”</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph {"className":""} -->
<p><strong>Gerçek Hayattan Örnek:</strong><br>Bir e-ticaret uygulamasında <code>OrderService</code> sınıfının hem sipariş oluşturma, hem fatura yazdırma, hem de e-posta gönderme işini yapması sıkça rastlanan bir hatadır. Bu sınıfın sorumlulukları ayrılmalı:</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">tsCopyEdit<code>// Doğru Yaklaşım
class OrderService {
  createOrder(data: OrderData): void { /*...*/ }
}

class InvoiceService {
  generateInvoice(orderId: number): Invoice { /*...*/ }
}

class NotificationService {
  sendEmail(to: string, subject: string): void { /*...*/ }
}
</code></pre>
<!-- /wp:preformatted -->

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

<!-- wp:heading {"className":""} -->
<h2 class="wp-block-heading">O — Open/Closed Principle (Açık/Kapalı İlkesi)</h2>
<!-- /wp:heading -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph {"className":""} -->
<p>“Yazılım bileşenleri geliştirilmeye açık, ancak değişime kapalı olmalı.”</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph {"className":""} -->
<p><strong>Gerçek Hayattan Örnek:</strong><br>Bir ödeme sistemi farklı ödeme yöntemlerini desteklemeli ama her yeni ödeme yöntemi eklendiğinde mevcut kod değiştirilmemelidir. Bunun yerine arayüz ve kalıtım kullanılabilir:</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">tsCopyEdit<code>interface PaymentMethod {
  pay(amount: number): void;
}

class CreditCardPayment implements PaymentMethod {
  pay(amount: number): void { /*...*/ }
}

class PaypalPayment implements PaymentMethod {
  pay(amount: number): void { /*...*/ }
}
</code></pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph {"className":""} -->
<p>Yeni bir yöntem (örneğin <code>BitcoinPayment</code>) eklemek, mevcut sınıfları değiştirmeden mümkün olur.</p>
<!-- /wp:paragraph -->

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

<!-- wp:heading {"className":""} -->
<h2 class="wp-block-heading">L — Liskov Substitution Principle (Yerine Geçme İlkesi)</h2>
<!-- /wp:heading -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph {"className":""} -->
<p>“Bir sınıfın alt sınıfları, o sınıfın yerine kullanılabilir olmalı.”</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph {"className":""} -->
<p><strong>Gerçek Hayattan Örnek:</strong><br>Bir <code>Bird</code> sınıfınız varsa ve <code>Penguin</code> de onun bir alt sınıfıysa, <code>fly()</code> fonksiyonu varsa ama penguen uçamıyorsa, Liskov ihlal edilir.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"className":""} -->
<p>Yanlış yapı:</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">tsCopyEdit<code>class Bird {
  fly(): void { /*...*/ }
}

class Penguin extends Bird {
  fly(): void { throw new Error("Can't fly"); }
}
</code></pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph {"className":""} -->
<p><strong>Çözüm:</strong> Uçabilen ve uçamayan kuşları ayırmak.</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">tsCopyEdit<code>interface Flyable {
  fly(): void;
}

class Sparrow implements Flyable { fly() { /*...*/ } }

class Penguin { /* fly yok */ }
</code></pre>
<!-- /wp:preformatted -->

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

<!-- wp:heading {"className":""} -->
<h2 class="wp-block-heading">I — Interface Segregation Principle (Arayüz Ayrımı İlkesi)</h2>
<!-- /wp:heading -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph {"className":""} -->
<p>“Kullanıcılar ihtiyaç duymadıkları metodlara bağımlı bırakılmamalıdır.”</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph {"className":""} -->
<p><strong>Gerçek Hayattan Örnek:</strong><br>Bir <code>IMachine</code> arayüzü hem <code>print()</code>, <code>scan()</code>, <code>fax()</code> metodlarını içeriyorsa ama bazı makineler sadece yazıcıysa bu durum hatalıdır.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"className":""} -->
<p>Çözüm: Küçük ve odaklı arayüzler tanımlanmalı.</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">tsCopyEdit<code>interface IPrinter {
  print(): void;
}

interface IScanner {
  scan(): void;
}

class SimplePrinter implements IPrinter {
  print(): void { /*...*/ }
}
</code></pre>
<!-- /wp:preformatted -->

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

<!-- wp:heading {"className":""} -->
<h2 class="wp-block-heading">D — Dependency Inversion Principle (Bağımlılıkların Ters Çevrilmesi)</h2>
<!-- /wp:heading -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph {"className":""} -->
<p>“Yüksek seviyeli modüller, düşük seviyeli modüllere bağlı olmamalı. İkisi de soyutlamalara bağlı olmalı.”</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph {"className":""} -->
<p><strong>Gerçek Hayattan Örnek:</strong><br>Bir uygulama doğrudan <code>MySQLDatabase</code> sınıfını kullanıyorsa, bu sınıfa bağımlıdır. Bunun yerine bir <code>IDatabase</code> arayüzü kullanılmalı:</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">tsCopyEdit<code>interface IDatabase {
  connect(): void;
}

class MySQLDatabase implements IDatabase {
  connect(): void { /*...*/ }
}

class App {
  constructor(private db: IDatabase) {}

  start(): void {
    this.db.connect();
  }
}
</code></pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph {"className":""} -->
<p>Bu sayede veri kaynağını değiştirmek mümkündür (örn. MongoDB, PostgreSQL).</p>
<!-- /wp:paragraph -->

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

<!-- wp:heading {"className":""} -->
<h2 class="wp-block-heading">Sonuç</h2>
<!-- /wp:heading -->

<!-- wp:paragraph {"className":""} -->
<p>DinamikUp olarak projelerimizde <strong>SOLID prensiplerini</strong> uygulayarak hem sürdürülebilir, hem de esnek mimariler kurmaya özen gösteriyoruz. Bu prensipler sadece teorik değil; gerçek dünyadaki problemlerin daha temiz, daha okunabilir ve daha az hata içeren çözümlerle ele alınmasını sağlıyor. Geliştirici ekiplerin ortak bir anlayışla kod yazması, projelerin uzun vadeli başarısının anahtarıdır.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"className":""} -->
<p></p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph {"className":""} -->
<p>DinamikUp olarak projelerimizde <strong>SOLID prensiplerini</strong> uygulayarak hem sürdürülebilir, hem de esnek mimariler kurmaya özen gösteriyoruz. Bu prensipler sadece teorik değil; gerçek dünyadaki problemlerin daha temiz, daha okunabilir ve daha az hata içeren çözümlerle ele alınmasını sağlıyor. Geliştirici ekiplerin ortak bir anlayışla kod yazması, projelerin uzun vadeli başarısının anahtarıdır.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"className":""} -->
<p><strong>#SOLID, #CleanCode, #YazılımMimarisi, #YazılımGeliştirme, #OOP, #BestPractices, #DinamikUp,</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->