Por que SECO é importante

Existem muitos artigos sobre o tema DRY, recomendo a leitura da fonte original “The Pragmatist Programmer” de Andy Hunt e Dave Thomas. No entanto, ainda vejo quantos desenvolvedores têm dúvidas sobre esse princípio no desenvolvimento de software.

O princípio DRY afirma que não devemos nos repetir, isso se aplica tanto ao código quanto aos processos que realizamos como programadores. Código de exemplo que viola DRY:

class Client {
    public let name: String
    private var messages: [String] = []
    
    init(name: String) {
        self.name = name
    }
    
    func receive(_ message: String) {
        messages.append(message)
    }
}

class ClientController {
    func greet(client: Client?) {
        guard let client else {
            debugPrint("No client!")
            return
        }
        client.receive("Hello \(client.name)!")
    }

    func goodbye(client: Client?) {
        guard let client else {
            debugPrint("No client!!")
            return
        }
        client.receive("Bye \(client.name)!")
    }
}

Como você pode ver nos métodos greet e adeus, uma instância opcional da classe Client é passada, que então precisa ser verificada quanto a zero, e então você pode começar a trabalhar com ela. Para cumprir o método DRY, você precisa remover a verificação nula duplicada da instância da classe. Isto pode ser implementado de várias maneiras; uma opção é passar a instância para o construtor da classe, após o que não haverá necessidade de verificações.

Mantemos o DRY especializando o ClientController em uma única instância do Client:

class Client {
    public let name: String
    private var messages: [String] = []
    
    init(name: String) {
        self.name = name
    }
    
    func receive(_ message: String) {
        messages.append(message)
    }
}

class ClientController {
    private let client: Client

    init(client: Client) {
        self.client = client
    }

    func greet() {
        client.receive("Hello \(client.name)!")
    }

    func goodbye() {
        client.receive("Bye \(client.name)!")
    }
}

DRY também diz respeito a processos que ocorrem durante o desenvolvimento de software. Vamos imaginar uma situação em que uma equipe de desenvolvimento tenha que carregar uma versão no mercado por conta própria, distraindo-a do desenvolvimento de software; isso também é uma violação do DRY; Essa situação é resolvida conectando-se um pipeline de CI/CD, no qual o release é liberado automaticamente, sujeito a determinadas condições atendidas pelos desenvolvedores.

Em geral, DRY trata da ausência de repetições tanto nos processos quanto no código, isso também é importante pela presença do fator humano: código que contém código menos repetitivo e barulhento é mais fácil de verificar se há erros; Os processos automatizados impossibilitam que as pessoas cometam erros ao executá-los, porque não há nenhum ser humano envolvido.

Steve Jobs tinha um ditado: “Uma linha de código que você nunca precisou escrever é uma linha de código que você nunca precisou depurar”.

Fontes

https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/
https://youtu.be/-msIEOGvTYM

Leave a Comment

Your email address will not be published. Required fields are marked *