Bugün üst düzey bir geliştiriciden "Bu arada, bir switch deyimi ile işlevleri göndermeye itirazınız nedir?" Diye bir kod incelemesi aldım. Arama yöntemlerine geçiş yoluyla bir argümanı pompalamanın ne kadar genişletilebilir değil, kötü OOP olduğu hakkında birçok yerde okudum. Ancak, gerçekten onun için kesin bir cevap bulamıyorum. Bunu kendim için bir kez ve herkes için halletmek istiyorum.
İşte rakip kod önerilerimiz (örnek olarak kullanılan php, ancak daha evrensel olarak uygulanabilir):
class Switch {
public function go($arg) {
switch ($arg) {
case "one":
echo "one\n";
break;
case "two":
echo "two\n";
break;
case "three":
echo "three\n";
break;
default:
throw new Exception("Unknown call: $arg");
break;
}
}
}
class Oop {
public function go_one() {
echo "one\n";
}
public function go_two() {
echo "two\n";
}
public function go_three() {
echo "three\n";
}
public function __call($_, $__) {
throw new Exception("Unknown call $_ with arguments: " . print_r($__, true));
}
}
Argümanın bir kısmı, "It (switch yöntemi), varsayılan durumları ele almanın genel __call () magic yönteminde olduğundan çok daha temiz bir yoludur."
Temizlik hakkında katılmıyorum ve aslında aramayı tercih ediyorum, ama başkalarının söylediklerini duymak istiyorum.
Şemayı destekleyebileceğim argümanlar Oop
:
- Yazmanız gereken kod açısından biraz daha temiz (daha az, okunması daha kolay, dikkate alınması gereken daha az anahtar kelime)
- Tüm eylemler tek bir yönteme devredilmemiştir. Burada yürütmede çok fazla fark yok, ama en azından metin daha bölümlere ayrılmıştır.
- Aynı şekilde, sınıfta belirli bir nokta yerine herhangi bir yere başka bir yöntem eklenebilir.
- Yöntemler ad boşluklu, güzel.
- Burada geçerli değildir, ancak
Switch::go()
bir parametre yerine bir üye üzerinde çalıştığı bir durumu düşünün . Önce üyeyi değiştirmeniz, ardından yöntemi çağırmanız gerekir. İçinOop
herhangi bir zamanda bağımsız yöntemleri çağırabilir.
Şemayı destekleyebileceğim argümanlar Switch
:
- Tartışma uğruna, varsayılan (bilinmeyen) bir istekle başa çıkmanın daha temiz yöntemi
- Daha az büyülü görünüyor, bu da tanıdık geliştiricileri daha rahat hissettirebilir
İki tarafın da ekleyeceği bir şey var mı? Onun için iyi bir cevap istiyorum.
Oop
her bir yöntemi tanımlamak için bazı IDE'ler (ör. NetBeans) tarafından ayrıştırılabilen phpdoc'a sahip olmasına izin verir.