En iyi cevap, bu sınıflar için kullanım durumunun ve ortamın ne olacağına bağlı olacaktır. Bir uygulama veya çerçeve geliştiren bir ekibin parçası olarak, bu ekip tarafından kullanılan tasarım kalıplarının benimsenmesi, diğerlerinin kodunuzu benimsemesini ve sürdürmesini kolaylaştıracağı için 'mükemmel' bir çözüm aramaya tercih edilebilir.
Bu sınıfların kullanılmasını ve genişletilmesini nasıl beklediğiniz de önemlidir. Gelecekte 'Kare'nin hareket etmesi gerekecek mi?Bir Şekil'nin hareketliliği her zaman statik mi, yoksa dinamik bir özellik olarak daha kullanışlı olabilir mi? Taşı(), Şekiller olmayan sınıflar için herhangi bir değere sahip mi?
public abstract class Shape
{
public bool isMovable()
{
return false;
}
public virtual void Move()
{
if (!isMovable() {
throw new NotSupportedException();
} else {
throw new BadSubclassException();
}
}
}
Sizin alt sınıfları daha sonra statik veya dinamik davranışı sağlamanız isMovable geçersiz kılabilir ve ayrıca bu kadar uzun dokümantasyon yapar gibi, değiştirilmiş veya zamanla sınıflandırma yapılabilir: taşınabilirliktir dinamik bir özellik olarak yararlı olabilir, bunu düşünün isMoveable öğesinin her zaman Taşı seçeneğinden önce gelmesi gerekir. Varsayılan davranış, ilgili tasarım kalıplarını nasıl uyguladıklarına bağlı olarak, kodunuzu kullanmayı beklediğiniz diğer kişilerin beklentilerine dayanmalıdır.
Bu kararları vermenin zorluğuna iyi bir örnek, koleksiyon sınıflarının mutabilitesinin farklı çerçevelerde nasıl evrildiğinin tarihine bakılarak bulunabilir. Değişken sınıfların (kümeler, diziler, sözlükler vb.) Temel sınıf olduğu, alt sınıflarda ve aynı zamanda ters olarak uygulanan değişmezlik içeren tasarımlar olmuştur. Her iki yaklaşımın yanı sıra dinamik bir yaklaşım için geçerli argümanlar vardır, ancak bir çerçeve kullanıcısı için en önemli faktör tutarlılık, çünkü doğru olan şey, kullanımı kolay olan ve güvenliği sağlayan şeydir. ve performans tehlikeye girmez.
Bu. "Bazı temel davranışları nasıl devralıyorum" sorusunun cevabı her zaman "ilk etapta bundan miras kalmaz". – KeithS
@KeithS, bu doğru. Mirasın durdurulması mirasa bakmak için sadece ters yoldur. Öyleyse, bu, OP'nin diğer ilerleyiş yolunu düşünmesine yardımcı olacaktır. :) –
@Mike, 'IMovable' hakkında ne dersiniz? – smartcaveman