Pourquoi SEC est important

Il existe de nombreux articles sur le thème DRY, je recommande de lire la source originale “The Pragmatist Programmer” d’Andy Hunt et Dave Thomas. Cependant, je vois encore combien de développeurs se posent des questions sur ce principe dans le développement de logiciels.

Le principe DRY stipule que nous ne devons pas nous répéter, cela s’applique à la fois au code et aux processus que nous effectuons en tant que programmeurs. Exemple de code qui viole 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)!")
    }
}

Comme vous pouvez le voir dans les méthodes greet et goodbye, une instance facultative de la classe Client est transmise, qui doit ensuite être vérifiée pour zéro, puis vous pouvez commencer à travailler avec elle. Pour vous conformer à la méthode DRY, vous devez supprimer la vérification nulle en double pour l’instance de classe. Cela peut être implémenté de plusieurs manières ; une option consiste à transmettre l’instance au constructeur de classe, après quoi aucune vérification n’est nécessaire.

Nous nous conformons à DRY en utilisant la spécialisation ClientController sur une seule instance 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 concerne également les processus qui se produisent lors du développement de logiciels. Imaginons une situation dans laquelle une équipe de développement doit mettre en ligne elle-même une version sur le marché, ce qui la détourne du développement de logiciels. Cela constitue également une violation de DRY ; Cette situation est résolue en connectant un pipeline CI/CD, dans lequel la version est publiée automatiquement, sous réserve du respect de certaines conditions par les développeurs.

En général, DRY concerne l’absence de répétitions à la fois dans les processus et dans le code, ceci est également important en raison de la présence du facteur humain : le code qui contient du code moins répétitif et bruyant est plus facile à vérifier pour les erreurs ; Les processus automatisés empêchent les utilisateurs de commettre des erreurs lors de leur exécution, car aucun humain n’est impliqué.

Steve Jobs avait un dicton : « Une ligne de code que vous n’avez jamais eu à écrire est une ligne de code que vous n’avez jamais à déboguer. »

Sources

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 *