İlk olarak, tamamen soyut bir sınıfın gerçekten sadece çoklu miras yapamayan bir arayüz olduğunu anlayın.
Yazma sınıfı, arayüz özü, beyin ölümü aktivitesidir. Öyle ki, bunun için bir yeniden düzenleme yapmamız gerekiyor. Bu üzücü. Bunu takiben “her sınıf bir arayüz elde eder” deseni sadece karışıklık yaratmaz, aynı zamanda noktayı tamamen özlüyor.
Arayüz, sınıfın ne yapabildiğine dair resmi bir açıklama olarak düşünülmemelidir. Bir arabirim, gereksinimlerini ayrıntılarıyla anlatan müşteri kodu kullanılarak uygulanan bir sözleşme olarak düşünülmelidir.
Şu anda sadece bir sınıfı uygulayan bir arayüz yazarken hiçbir sorunum yok. Aslında henüz hiçbir sınıfın uygulamaması umurumda değil. Çünkü kullandığım kodun neye ihtiyacı olduğunu düşünüyorum. Arayüz, kullanım kodunun ne istediğini ifade eder. Sonradan gelenler, bu beklentileri karşıladığı sürece, istediklerini yapabilir.
Şimdi bunu bir nesnenin diğerini kullandığı her zaman yapmam. Bunu bir sınırı geçerken yapıyorum. Bir nesnenin tam olarak hangi nesneyle konuştuğunu bilmesini istemediğimde yapıyorum. Polimorfizmin çalışacağı tek yol budur. Müşteri kodumun değişmesi muhtemel olduğunu düşündüğüm nesneyi beklerim. Kullandığım şey String sınıfı olduğunda kesinlikle bunu yapmam. String sınıfı hoş ve istikrarlı ve benden değişime karşı korunmaya ihtiyacım yok.
Bir soyutlamadan ziyade doğrudan somut bir uygulamayla etkileşime girmeye karar verdiğinizde, uygulamanın değişmemeye güvenecek kadar istikrarlı olduğunu öngörürsünüz.
İşte bu doğru Bağımlılık İnversiyon Prensibi'ni benimseme yöntemim var . Bunu kör bir şekilde fanatik olarak her şeye uygulamamalısın. Bir soyutlama eklediğinizde, projenin ömrü boyunca istikrarlı olması için uygulama sınıfı seçimine güvenmediğinizi söylüyorsunuz.
Bunların hepsi Açık Kapalı Prensibi takip etmeye çalıştığınızı varsayar . Bu ilke, yalnızca belirlenmiş koda doğrudan değişiklik yapmakla ilişkili maliyetler önemli olduğunda önemlidir. İnsanların ayrılma nesnelerinin ne kadar önemli olduğu konusunda aynı fikirde olmamalarının ana nedenlerinden biri, doğrudan değişiklikler yaparken herkesin aynı masrafları yaşamamasıdır. Kod tabanınızın tamamını yeniden test etmek, yeniden derlemek ve yeniden dağıtmak sizin için önemsiz ise, doğrudan değişiklikle bir değişiklik ihtiyacını çözmeniz bu sorunun çok çekici bir şekilde basitleştirilmesi olabilir.
Bu soruya basit bir beyin ölümü cevabı yok. Bir arayüz veya soyut bir sınıf, her sınıfa ekleyeceğiniz bir şey değildir ve sadece uygulama sınıflarının sayısını sayamaz ve gerekmediğine karar veremezsiniz. Değişimle baş etmekle ilgili. Bu, geleceği tahmin ettiğiniz anlamına gelir. Yanlış yaparsan şaşırma. Kendinizi bir köşeye sokmadan olabildiğince basit tutun.
Bu yüzden lütfen sadece kodu okumamıza yardımcı olacak soyutlamalar yazmayın. Bunun için araçlarımız var. Ayrılması gerekenleri ayırmak için soyutlamalar kullanın.