Questo post del blog è stato pubblicato su Hacker News con diversi upvotes. Provenendo dal C ++, la maggior parte di questi esempi sembra andare contro ciò che mi è stato insegnato.
Ad esempio # 2:
Bad:
def check_for_overheating(system_monitor)
if system_monitor.temperature > 100
system_monitor.sound_alarms
end
end
contro buono:
system_monitor.check_for_overheating
class SystemMonitor
def check_for_overheating
if temperature > 100
sound_alarms
end
end
end
Il consiglio in C ++ è che dovresti preferire le funzioni libere invece delle funzioni membro in quanto aumentano l'incapsulamento. Entrambi sono identici semanticamente, quindi perché preferire la scelta che ha accesso a più stati?
Esempio 4:
Bad:
def street_name(user)
if user.address
user.address.street_name
else
'No street name on file'
end
end
contro buono:
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
Perché è responsabilità di User
formattare una stringa di errore non correlata? Cosa succede se voglio fare qualcosa oltre a stampare 'No street name on file'
se non ha una strada? Cosa succede se la strada è denominata la stessa cosa?
Qualcuno potrebbe illuminarmi sul "Dillo, non chiedere" vantaggi e logica? Non sto cercando il migliore, ma cercando di capire il punto di vista dell'autore.