Em inglês: Tell, don’t Ask. Isto significa que você deve pedir para o objeto executar o que você precisa e não perguntar seu estado e decidir como ele deve se comportar. A lógica de como se comportar dado seu estado e deve estar encapsulada no próprio objeto.
Veja o exemplo abaixo:
Isto é justamente o que queremos evitar. O método pergunta uma certa condição para o objeto e a partir desta define o que será feito. Não há dúvidas de que todo este processo deveria estar encapsulado na classe Order, já que ela tem todas as informações necessárias para resolver o problema. A solução ficaria assim:
Um método na classe Order que encapsula toda lógica:
O método original simplesmente chama no novo método:
Uma das formas de facilitar a aplicação deste conceito é separar os métodos entre comandos e perguntas, como sugerem Andy Hunt e Dave Thomas do The Pragmatic Programmers.
A idéia é separar métodos entre comandos e perguntas. Um comando altera o estado do objeto, enquanto que uma pergunta se limita a responder o estado do objeto, sem alterá-lo. Desta forma temos claramente a noção de quando estamos telling, chamando um comando, e quando estamos asking, chamando uma pergunta.