Tôi đã nhận được một đánh giá mã từ một nhà phát triển cao cấp ngày hôm nay hỏi "Nhân tiện, sự phản đối của bạn đối với việc gửi các chức năng bằng cách tuyên bố chuyển đổi là gì?" Tôi đã đọc ở nhiều nơi về cách bơm một đối số thông qua chuyển sang các phương thức gọi là OOP xấu, không thể mở rộng, v.v. Tuy nhiên, tôi thực sự không thể đưa ra một câu trả lời dứt khoát cho anh ta. Tôi muốn giải quyết điều này cho bản thân mình một lần và mãi mãi.
Dưới đây là các đề xuất mã cạnh tranh của chúng tôi (php được sử dụng làm ví dụ, nhưng có thể áp dụng phổ biến hơn):
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));
}
}
Một phần trong lập luận của ông là "Nó (phương thức chuyển đổi) có cách xử lý các trường hợp mặc định gọn gàng hơn nhiều so với những gì bạn có trong phương thức ma thuật __call () chung chung."
Tôi không đồng ý về sự sạch sẽ và thực tế thích gọi điện, nhưng tôi muốn nghe những gì người khác nói.
Đối số tôi có thể đưa ra để hỗ trợ Oop
chương trình:
- Sạch hơn một chút về mã bạn phải viết (ít hơn, dễ đọc hơn, ít từ khóa hơn để xem xét)
- Không phải tất cả các hành động được ủy thác cho một phương thức duy nhất. Không có nhiều sự khác biệt trong thực thi ở đây, nhưng ít nhất văn bản có nhiều ngăn hơn.
- Trong cùng một hướng, một phương thức khác có thể được thêm vào bất cứ nơi nào trong lớp thay vì một vị trí cụ thể.
- Các phương thức được đặt tên, đó là tốt đẹp.
- Không áp dụng ở đây, nhưng xem xét một trường hợp
Switch::go()
hoạt động trên một thành viên chứ không phải là một tham số. Bạn sẽ phải thay đổi thành viên trước, sau đó gọi phương thức. Đối vớiOop
bạn có thể gọi các phương thức độc lập bất cứ lúc nào.
Đối số tôi có thể đưa ra để hỗ trợ Switch
chương trình:
- Để tranh luận, phương pháp sạch hơn để xử lý một yêu cầu mặc định (không xác định)
- Có vẻ ít ma thuật hơn, điều này có thể khiến các nhà phát triển xa lạ cảm thấy thoải mái hơn
Bất cứ ai có bất cứ điều gì để thêm cho cả hai bên? Tôi muốn có một câu trả lời tốt cho anh ấy.
Oop
cho phép có phpdoc để mô tả từng phương thức, có thể được phân tích cú pháp bởi một số IDE (ví dụ: NetBeans).