Şu anda C # konusunda uzmanlaşmaya çalışıyorum, bu yüzden Gary McLean Hall tarafından C # ile Adaptive Code okuyorum .
Desenler ve anti-desenler hakkında yazıyor. Uygulamalara karşı arayüzler kısmında şunları yazar:
Arayüzlere programlama kavramında yeni olan geliştiriciler genellikle arayüzün arkasındaki şeyleri bırakmakta zorluk çekerler.
Derleme zamanında, bir arabirimin herhangi bir istemcisinin, hangi arabirimin uygulandığını bilmemesi gerekir. Bu tür bilgiler, müşteriyi arayüzün belirli bir uygulamasına bağlayan yanlış varsayımlara yol açabilir.
Bir sınıfın kalıcı depolamada bir kayıt kaydetmesi gereken yaygın örneği düşünün. Bunu yapmak için, haklı olarak kullanılan kalıcı depolama mekanizmasının ayrıntılarını gizleyen bir arayüze delege eder. Ancak, arabirimin hangi uygulamasının çalışma zamanında kullanıldığına dair herhangi bir varsayımda bulunmak doğru olmaz. Örneğin, herhangi bir uygulamaya arabirim referansı vermek her zaman kötü bir fikirdir.
Dil engeli ya da deneyim eksikliğim olabilir, ama bunun ne anlama geldiğini tam olarak anlamıyorum. İşte anladıklarım:
C # uygulamak için serbest zaman eğlenceli bir projem var. Orada bir sınıfım var:
public class SomeClass...
Bu sınıf birçok yerde kullanılıyor. C # öğrenirken, bir arayüz ile soyutlamanın daha iyi olduğunu okudum, bu yüzden aşağıdakileri yaptım
public interface ISomeClass <- Here I made a "contract" of all the public methods and properties SomeClass needs to have.
public class SomeClass : ISomeClass <- Same as before. All implementation here.
Bu yüzden tüm sınıf referanslarına girdim ve bunları ISomeClass ile değiştirdim.
Ben yazdım inşaat hariç:
ISomeClass myClass = new SomeClass();
Bunun yanlış olduğunu doğru mu anlıyorum? Evet ise, neden öyleyse bunun yerine ne yapmalıyım?
ISomeClass myClass = new SomeClass();
? Gerçekten demek istiyorsan, bu yapıcıda özyineleme, muhtemelen istediğin değil. ?
ISomeClass
), ancak hangi seçeneklere karşı tek bir noktada yararlı kod yazmanın imkansız olduğu çok genel arayüzler yapmak da kolaydır. arabirimi yeniden düşünmek ve kodu yeniden yazmak veya yok etmek içindir.