Blogpost này đã được đăng trên Hacker News với một số upvote. Đến từ C ++, hầu hết các ví dụ này dường như đi ngược lại với những gì tôi đã được dạy.
Chẳng hạn như ví dụ # 2:
Xấu:
def check_for_overheating(system_monitor)
if system_monitor.temperature > 100
system_monitor.sound_alarms
end
end
so với tốt
system_monitor.check_for_overheating
class SystemMonitor
def check_for_overheating
if temperature > 100
sound_alarms
end
end
end
Lời khuyên trong C ++ là bạn nên thích các hàm miễn phí thay vì các hàm thành viên vì chúng làm tăng sự đóng gói. Cả hai đều giống hệt nhau về mặt ngữ nghĩa, vậy tại sao lại thích lựa chọn có quyền truy cập vào trạng thái nhiều hơn?
Ví dụ 4:
Xấu:
def street_name(user)
if user.address
user.address.street_name
else
'No street name on file'
end
end
so với tốt
def street_name(user)
user.address.street_name
end
class User
def address
@address || NullAddress.new
end
end
class NullAddress
def street_name
'No street name on file'
end
end
Tại sao trách nhiệm User
định dạng chuỗi lỗi không liên quan? Nếu tôi muốn làm gì đó ngoài việc in 'No street name on file'
nếu nó không có đường thì sao? Nếu đường phố được đặt tên giống nhau thì sao?
Ai đó có thể khai sáng cho tôi về những lợi thế và lý do "Đừng hỏi" không? Tôi không tìm kiếm cái nào tốt hơn, mà thay vào đó là cố gắng hiểu quan điểm của tác giả.