Buradasın
SOLID Prensipleri ve PHP'de Nesne Tabanlı Programlama Eğitimi
youtube.com/watch?v=8xBCPhnnZ64Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, Duran Caymaz tarafından sunulan bir eğitim içeriğidir ve yazılım geliştirme prensiplerinden SOLID prensiplerini anlatmaktadır.
- Video, SOLID prensiplerinin ne olduğunu açıklayarak başlıyor ve ardından bu prensiplerin ilk dört tanesi olan Single Responsibility (Tek Sorumluluk), Open-Closed Principle (Açık-Kapalı Prensibi), Liskov'un Substitution Prensibi (LSP) ve Interface Segregation Prensibi (ISP) detaylı olarak ele alınıyor. Eğitmen, her prensibi kod örnekleriyle açıklıyor ve kötü kod örnekleri ile iyi kod örnekleri arasında karşılaştırma yapıyor.
- Eğitim içeriğinde özellikle bir sipariş sistemi ve indirim sistemi üzerinden SOLID prensiplerinin nasıl uygulanacağı gösteriliyor. Ayrıca Dependency Inversion Prensibi de anlatılmakta ve MySQL, Redis gibi farklı veritabanı bağlantılarını nasıl değiştirebileceğimizi göstererek kodun daha temiz, okunabilir ve geliştirilebilir hale geldiğini açıklıyor.
- 00:01SOLID Prensipleri Tanıtımı
- SOLID prensipleri, kodun daha okunaklı ve anlaşılır olmasını sağlayan beş adet prensipin kısaltmasıdır.
- SOLID prensipleri: Single Responsibility, Open Closed Principle, Liskov Substitution Principle, Interface Segregation ve Dependency Inversion'dur.
- Bu prensipler sayesinde kodlar daha iyi yönetilebilir ve bir parçanın başka bir programda da kullanılabilir hale gelir.
- 01:27Single Responsibility Prensibi
- Single Responsibility prensibi, bir sınıfın veya metodun tek bir işten sorumlu olması gerektiği anlamına gelir.
- Bir sınıfın değişmek için sadece o yaptığı işin değişmesi gerekir, başka bir neden olmamalıdır.
- Örneğin, sipariş sınıfında sadece sipariş ekleme ve fiyat hesaplama işlemleri olmalı, yazdırma veya veritabanına kaydetme gibi işlemler ayrı sınıflarda yapılmalıdır.
- 08:26Open Closed Principle
- Open Closed Principle, bir sınıfın geliştirilmeye açık fakat değiştirilmeye kapalı olması gerektiği prensibidir.
- Bu prensip sayesinde sınıflar genişletilebilir ancak değiştirilmemelidir.
- Örneğin, indirim sınıfında farklı indirim türleri (yüzde, KDV, stopaj) için hesaplama yapılabilir, ancak yeni indirim türleri eklendiğinde mevcut sınıf değiştirilmemelidir.
- 10:18Open-Close Mantığı ve Interface Kullanımı
- Open-Close mantığına ulaşmak için bir interface oluşturulabilir.
- Interface, farklı indirim türleri (fix indirim, KDV indirimi) için genişletilebilir.
- Ana sınıfa dokunmadan, interface kullanarak farklı indirim sınıfları oluşturulabilir.
- 12:23Liskov Substitution Prensibi
- Liskov Substitution Prensibi, bir programdaki nesnelerin doğruluğunu etkilemeden alt türlerinin örnekleriyle değiştirilebilir olmasıdır.
- Bir sınıf başka bir sınıftan özellik alırsa, bu özelliği aynen kullanması gerekir.
- Interface kullanarak farklı sipariş türleri (normal order, special order) oluşturulabilir ve Liskov Substitution Prensibi ihlal edilmez.
- 16:13Interface Segregation Prensibi
- Interface Segregation Prensibi, bir istemcinin asla kullanmadığı bir arayüzü uygulamaya zorlanmaması veya istemcilerin kullanmadıkları metotlara bağımlı olmaya zorlanmamasıdır.
- Her işin ayrı bir interface olması gerekir.
- Farklı sipariş türleri (in-store order, online order) için ayrı interface'ler oluşturulabilir ve sınıflar sadece ihtiyaç duydukları metotları kullanabilir.
- 19:32Dependency Inversion Prensibi
- Dependency inversion prensibi, yüksek seviyeli modüllerin düşük seviyeli modüllere değil, her ikisinin de soyutlamalara (abstractionlara) bağımlı olması gerektiğini belirtir.
- Bu prensip, kodun daha temiz, okunabilir ve geliştirilebilir olmasını sağlar.
- 19:54Bağımlılık Örneği ve Çözümü
- MySQL connection ve order manager örneğinde, order manager sınıfı doğrudan MySQL connection sınıfına bağımlı olduğunda, üstteki sınıfa yapılan herhangi bir değişiklik alt sınıfı etkileyebilir.
- Bu sorunu çözmek için interface kullanmak gerekir; örneğin "OrderRepository" interface'i oluşturulabilir.
- Order manager sınıfı artık doğrudan MySQL class'ı yerine bu interface'i kullanır.
- 21:36Dependency Inversion Prensibinin Avantajları
- Dependency inversion prensibi sayesinde, projenin büyümesi durumunda farklı veritabanları (örneğin MySQL yerine MySQL veya Redis) kullanılabilir.
- Sadece bir değişiklikle istenilen veritabanı seçilebilir, bu da kodun daha esnek olmasını sağlar.
- Bu prensip, bağımlılıkları azaltarak temiz, okunabilir ve geliştirilebilir bir kod ortamı oluşturur.