The Open Close Principle (OCP)
Uygulamamizin entity katmanin genişletilmeye açik ama değişikliğe ve silmeye kapali olmasi prensibidir.Bu her ne kadar da imkansiz olsa da değişiklikleri minimum düzeye indirecek önlemleri almaliyiz.
kapali tutmanin iki yolu;
1-Abstraction kullanmak. Değişiçek kisimlari soyutlayarak isole etmek
2-Data Driven yaklaşimi
Liskov Substitution Principle (LSP)
Base class a point eden fonksiyonlarin türeyen class lar üzerinde çalişmasini sağlama prensibidir.
Yani base class i kullanan fonksiyolarin base class yerine türetilen class i da kullanmasi sağlanmali.
Bu problemden kurtulmanin yolu da fonksiyonu detaylardan abstract etmek.
Fonksiyonun üzerinde işlem yaptiği tip olarak öncelikle üzerinde çaliştiği tipi görmeli.
Heuristic and Conventions
Bütün member lari private yap,encapsulation genelde sağlamak.
Global değişken kullanmaktan kaçin:Değeri her an heryerde değişebilen global değişkenler programin olmadik yerlerinde olmadik şekilde etkide bulunabilirler
Stability Dependencies Principle (SDP)
Yapilar arasindaki ilişkiler bu yapilarin stabilitesini bozmamali.Yapilar kendilerinden daha kararli olan yapilarla ilişkilenmeli.
The Stable Abstractions Principle (SAP)
Stabilite si fazla olan yapilarin abstraction i da fazla olmali.
Common Reuse Principle (CRP)
Bir yapi içindeki bütün class lari tekrar kullanilabilir halde olmali ki herhangi bir class ta yapilan değişiklik yapinin yeni bir versiyonunu oluşturmuş olur.
The Reuse/Release Equivalance Principle (REP)
Bu prensip genelde bir uygulama üzerinde birden fazla takim çalişiyorsa kullanilir. System yoluyla released edilmiş componentler efektif şekilde kullanilabilir.
Common Closure Principle (CCP)
Yapi içindeki class larin değişikliklerden etkilenmesini önlemek gerekir.Çünkü yapi üzerindeki değişiklik içindeki class lar da etkileyebilir.
The Acyclic Dependencies Principle (ADP)
Eğer birbirleriyle ilişkili yapilari olduğu gibi kullacaksa dependency ler en üstten yani roottan en alt kadameye kadar ayarlanmali.
The Interface Segregation Principle (ISP)
Kullanilacak memberlar (metotlar property ler vs) gruplanarak yari ayri interface lere bölünmeli.Böylece class in kullanmadiği member lar implement edilmek zorunda kalinmaz.
Polyad vs Monad
Objelerin Monad olarak (property ler grouplanarak içinde bulunduğu obje) fonksiyonda paramatre olarak verilmesi işlemidir.Objelerin Polyad(daha küçük yapilar olarak) fonksiyonlara parametre olarak verilmesidir.Böylece dependency ler de daha küçük ve daha kolay yapi korunumu sağlar.