Tuesday, June 12, 2007 10:25 AM

O palavrão acima significa: You ain’t gonna need it. Em bom português: Você não vai precisar disto.

A idéia é que você só implemente o código estritamente necessário para o que o requisito de negócios seja satisfeito. Nem uma linha de código a mais.

Como já falei em outras ocasiões, soa bonito, mas não me convence. Você quer simplicidade? Fique com o KISS. Você não quer desperdício? Fique com o Eliminate waste do Lean. Para que você precisa de mais um conceito te dizendo para não complicar as coisas?

Mas porque eu implico tanto com o YAGNI?

Vamos pegar outro conceito, o DRY, e fazer um teste do absurdo nele: Se você conseguisse uma forma de escrever uma linha código somente uma vez e SEMPRE reaproveitá-la, seria bom? E se você conseguisse fazer isto com cada trecho da linha? Seria ótimo, minimizaria o código-fonte, facilitaria manutenção, etc.

Agora vamos fazer o mesmo teste com o YAGNI: O seu cliente pediu explicitamente para você que o software seja independente do banco de dados? Não, então você não precisa desta camada de acesso a dados. Você precisa reaproveitar esta regra de negócio agora? Não, então você não precisa encapsulá-la. E assim vai até você chegar ao bom e velho código espaguete, ou sopão ASP.

Mas é lógico que você não vai fazer isto, porque você vai usar o bom senso. O problema é que se começo a precisar de muito bom senso para aplicar um conceito então começo a achar que este conceito não está me ajudando muito, pode estar até atrapalhando, entendeu?

Comments

At 6/12/2007 12:58 PM, Andre Furtado said:

# re: Conceitos e princípios: YAGNI

Acho que a discussão se resume a: você pode fazer MELHOR, porém não deve fazer MAIS. Acho que o YAGNI pode coexistir com padrões (automatizados ou não), para fazer algo *melhor*, e ser bem suportado quando há uma disciplina de refactoring seguida pela equipe.

[]s
-- AFurtado
Post Comment
Title *
Name *
Email (never displayed)
Website
Comment * (Allowed tags: blockquote, a, strong, em, p, u, strike, super, sub, code)  
Please add 2 and 5 and type the answer here: