Açık-kapalı prensibi (OCP), bir nesnenin uzatma için açık, ancak değişiklik için kapalı olması gerektiğini belirtir. Anlıyorum ve SRP ile birlikte kullanarak sadece bir şey yapan sınıflar yaratmak için kullanıyorum. Ve, tüm davranış denetimlerini bazı alt sınıflarda genişletilebilen veya geçersiz kılınabilecek yöntemlere çıkarmayı mümkün kılan birçok küçük yöntem oluşturmaya çalışıyorum. Böylece, bağımlılık enjeksiyonu ve kompozisyonu, olaylar, delegasyon vb. Yoluyla birçok uzatma noktasına sahip sınıflarla sonuçlanıyorum.
Aşağıdakileri basit, genişletilebilir bir sınıf olarak düşünün:
class PaycheckCalculator {
// ...
protected decimal GetOvertimeFactor() { return 2.0M; }
}
Şimdi, örneğin, OvertimeFactor
1.5 olarak değiştiğini söyleyin . Yukarıdaki sınıf genişletilmek üzere tasarlandığından, kolayca alt sınıflara ayırıp farklı bir ürüne geri dönebilirim OvertimeFactor
.
Ancak ... sınıf, OCP'ye genişletme ve yapıştırma için tasarlanmış olmasına rağmen, söz konusu yöntemi alt sınıflandırma ve geçersiz kılma ve ardından nesnelerimi IoC kapsayıcıma yeniden kablolama yerine söz konusu tek yöntemi değiştireceğim.
Sonuç olarak, OCP'nin neyi başarmaya çalıştığının bir kısmını ihlal ettim. Sadece tembel olduğumu hissediyorum çünkü yukarıda biraz daha kolay. OCP'yi yanlış mı anlıyorum? Gerçekten farklı bir şey yapmalı mıyım? OCP'nin avantajlarından farklı olarak yararlanıyor musunuz?
Güncelleme : cevaplara dayanarak, bu farklı örnek bir dizi farklı nedenden dolayı fakir bir örnek gibi görünüyor. Örneğin ana amacı sınıfı geçersiz kılınmış davranışını değiştirecek zaman bu yöntemler sağlamak suretiyle uzatılabilir tasarlanmıştır gösterilmesidir halka değiştirmek için gerek kalmadan yöntemler iç veya özel kod. Yine de, OCP'yi kesinlikle yanlış anladım.