Skip to content

Latest commit

 

History

History
145 lines (101 loc) · 6.59 KB

README.md

File metadata and controls

145 lines (101 loc) · 6.59 KB

DRY

⁉ O que é?

DRY é um acronimo para: Don't Repeat Yourself, que em português significa: Não se repita. É um conceito na área de programação que recomenda a criação de uma funcionalidade dentro de um sistema apenas uma vez e que ela seja reutilizada quantas vezes seja necessária, sem que seja preciso criar ela novamente em outras partes do sistema, evitando assim a duplicidade de código e lógica. A expressão DRY foi utilizada por Andy Hunt e Dave Thomas no livro "O Programador Pragmático: De Aprendiz a Mestre",

✍️ Definições

Antes de tudo, é necessário entender que não faz sentido a existência de uma mesma porção de código em diversos lugares de uma aplicação, pois isso tem como consequência um aumento desnecessário no tamanho da aplicação e também aumenta o trabalho para a manutenção do sistema, pois uma pequena mudança as vezes terá que ser replicada em mais de um ponto e caso a mudança não seja feita em todos os pontos, isso poderá abrir brecha para bugs inesperados.

Aplicando esse conceito de maneira efetiva, uma mudança de lógica dentro do sistema irá ser replicada de maneira previsível e uniforme, o que irá refletir em um sistema funcional e de fácil manutenção. Lembre-se você escreve código para que outras pessoas possam utilizar ele, portanto leve isso sempre em consideração na hora de desenvolver alguma solução ou tarefa.

👾 Exemplos

Exemplo em js:

Imaginando que em um sistema tenha um formulário de login e de cadastro de usuário, nos dois formulários será necessário validar se o e-mail fornecido é válido. Abaixo será apresentado dois exemplos: um onde o DRY não é utilizado e outro onde o DRY é utilizado

🐛 Exemplo onde o DRY não é utilizado

Na porção de código abaixo é criado uma constante chamada validateEmail para validar o e-mail antes de fazer a lógica de autenticação do usuário.

// auth/login.js
const validateEmail = (email) => /\S+@\S+\.\S+/.test(email)

function login (email, password) {
    const isEmailValid = validateEmail(email);

    if(isEmailValid){
        /** Lógica caso o e-mail seja válido */
    }

    /** Lógica caso o e-mail não seja válido*/
}

Já na parte abaixo, é criado novamente a mesma constante para fazer uma validação antes de criar um novo usuário.

// auth/register.js
const validateEmail = (email) => /\S+@\S+\.\S+/.test(email)

function register (email, password) {
    const isEmailValid = validateEmail(email);

     if(isEmailValid){
        /** Lógica caso o e-mail seja válido */
    }

    /** Lógica caso o e-mail não seja válido*/
}

Os códigos acima servem apenas para demonstrar como uma lógica pode acabar sendo refeita em partes diferentes dentro de uma aplicação. Gerando um retrabalho em uma modificação ou implementação de lógica nova.

🚀 Exemplo utilizando DRY

Primeiro, será necessário extrair a função de validar e-mail para um arquivo separado, para que ela seja posteriomente importada e reutilizada.

// utils/formValidator.js

/**
 * Return if the email
 * is a valid one
 * @param {String} email The user's email
 */
export const validateEmail = (email) => /\S+@\S+\.\S+/.test(email);
// auth/login.js
import { validateEmail } from 'utils/formValidator'

function login (email, password) {
    const isEmailValid = validateEmail(email);

     if(isEmailValid){
        /** Lógica caso o e-mail seja válido */
    }

    /** Lógica caso o e-mail não seja válido*/
}
// auth/register.js

import { validateEmail } from 'utils/formValidator'

function register (email, password) {
    const isEmailValid = validateEmail(email);

     if(isEmailValid) {
        /** Lógica caso o e-mail seja válido */
    }

    /** Lógica caso o e-mail não seja válido*/
}

Como pode ser visto acima, o método validateEmail foi utilizado em duas funções diferentes em arquivos distintos de um jeito bem simples, agora caso o método seja alterado, a lógica será replicada no login e no cadastro.

💪 Como contribuir

Basta criar um fork do projeto, realizar as modificações que achar necessário e depois fazer um Pull Request. Toda ajuda é bem vinda, caso veja algum erro, não hesite em contribuir com o projeto!

📚 Bibliografia e referências

Conteúdos em português:

Artigos:

Conteúdos em inglês:

Vídeos:

Artigos: