E você precisa ter muita, muito certo antes de decidir que não pode haver mais de três de nada no seu sistema. Um corolário desta regra é…
Não codifique nada
Isso parece óbvio, mas alguns desenvolvedores gostam de coisas duras. Doce bebê Elvis, eu até vejo esse tipo de coisa o tempo todo:
someString.PadLeft(13);
Quero dizer, sério? Por que 13? Por que não 14? Ou 12? Que tal uma constante que explique o significado do valor?
Você pode não pensar assim, mas toda vez que você cria um objeto dentro de uma classe, está codificando essa classe e sua implementação. Por exemplo:
class SimpleEncryptor {
public encrypt(plainText: string): string {
const weakEncryption = new WeakEncryptionAlgorithm();
return weakEncryption.encrypt(plainText);
}
}
E daí se você quiser alterar o algoritmo de criptografia?
Em vez disso, use a injeção de dependência e você pode usar qualquer algoritmo desejado:
interface IEncryptionAlgorithm {
encrypt(plainText: string): string;
}
class SimpleEncryptor {
public encrypt(plainText: string, encryptionAlgorithm: IEncryptionAlgorithm): string {
return encryptionAlgorithm.encrypt(plainText);
}
}
Freqüentemente, ‘excesso de engenharia’ é uma engenharia adequada
Acredite, eu recebo a noção de engenharia excessiva. Eu apenas disse para você manter as coisas simples. Mas, às vezes, fazer as coisas “do jeito certo” parece uma engenharia excessiva. Sempre que você pensa que está engenharia demais, pare e considere isso, bem, talvez você não esteja. Criar interfaces e codificar contra eles podem parecer super-engenharia. Eu sei que é uma linha tênue para caminhar, mas planejar com antecedência algo que você sabe que precisará não está errado. E isso me leva a …
Às vezes você vai precisar disso
Eu nunca entendi o princípio Yagni (“Você não precisa disso”). Com muita frequência, você descobre que, bem, você sabe, acabou precisando. E até então, implementar essa coisa que você “não precisaria” tornou -se um pesadelo que você gostaria de ter ido em frente e lançou as bases para isso.
Talvez você codificou alguma coisa (você não precisaria de flexibilidade aqui, certo?). Talvez você não tenha planejado precisar de sete impostos ou um algoritmo de criptografia diferente. Não vejo mal em pensar “você sabe, eventualmente, precisaremos lidar com mais do que widgets aqui” e codificar para que as mudanças sejam fáceis quando novas engrenagens e rodas dentadas inevitavelmente aparecem.