Son zamanlarda başımı OOP etrafına sarmaya başladım ve şimdi soyut sınıflar ve arayüzler arasındaki farklar hakkında ne kadar çok okursam o kadar karışık hale geliyorum. Şimdiye kadar ikisi de somutlaştırılamaz. Arayüzler iskeleti belirleyen az ya da çok yapısal planlardır ve özetler kısmen kod uygulayarak farklıdır.
Özel durumum aracılığıyla bunlar hakkında daha fazla bilgi edinmek istiyorum. İşte biraz daha fazla arka plan bilgisi istiyorsanız ilk sorumun bağlantısı: Yeni sınıfım için iyi bir tasarım modeli nedir?
İşte oluşturduğum iki sınıf:
class Ad {
$title;
$description
$price;
function get_data($website){ }
function validate_price(){ }
}
class calendar_event {
$title;
$description
$start_date;
function get_data($website){ //guts }
function validate_dates(){ //guts }
}
Gördüğünüz gibi bu sınıflar neredeyse aynı. Değil Burada gösterilen, ancak diğer fonksiyonlar vardır like get_zip()
, save_to_database()
benim sınıfları arasında yaygındır. Ayrıca, tüm ortak yöntemlere ve elbette bu sınıflara özgü özelliklere (örneğin, kilometre, ağırlık) sahip diğer sınıflar Otomobil ve Evcil Hayvanlar da ekledim.
Şimdi DRY prensibini ihlal ettim ve aynı kodu birden fazla dosyada yönetiyorum ve değiştiriyorum. Tekneler, atlar ya da her neyse daha fazla ders almayı düşünüyorum.
Yani bir arayüz veya soyut bir sınıf kullanacağım yer burası mı? Soyut sınıflar hakkında anladığım kadarıyla, bir soyut sınıfı soyut sınıfa yerleştirilmiş tüm ortak unsurları içeren bir şablon olarak kullanır ve daha sonra sadece gelecekteki sınıflarda özellikle gerekli olan öğeleri eklerdim. Örneğin:
abstract class content {
$title;
$description
function get_data($website){ }
function common_function2() { }
function common_function3() { }
}
class calendar_event extends content {
$start_date;
function validate_dates(){ }
}
Yoksa bir arabirim mi kullanırım ve bunlar birbirine çok benzediğinden, alt sınıfların her birinin bütünlük nedenleriyle kullanmak zorunda kaldığı bir yapı oluşturmalı ve her sınıftan sorumlu olmak için bu sınıftan çıkan son geliştiriciye bırakmalı mıyım? ortak işlevlerin bile ayrıntıları. benim düşüncem, bazı 'ortak' işlevlerin gelecekte kendi sınıflarının ihtiyaçları için değiştirilmesinin gerekebileceğidir.
Yukarıdaki tüm bunlara rağmen, soyut sınıfların ve arayüzlerin neyi ve nedenini yanlış anladığımı düşünüyorsanız, elbette geçerli bir cevabın bu yönde düşünmeyi bırakmasını ve ilerlemenin doğru yolunu önermesini sağlayın!
Teşekkürler!