Dry prensibi nedir?

Bugün , kısaltması olarak adlandırılan bir tasarım ilkesini keşfedeceğiz Don't Repeat Yourself. Tabii ki, oldukça açık bir cümle, yani kodu bir kereden fazla yazmamalısınız.

İlke şöyle der: "Her mantığın bir sistem içinde tek bir açık temsili olmalıdır".

Elbette, bileşen tabanlı çerçevelerin gelmesiyle birlikte, yeniden kullanılan kodların giderek daha azını görüyoruz.

DRY Örnekler

Bazı basit kullanım durumları göstereceğim, ancak bunlar size DRY'nin ne anlama geldiğini iyi anlatmalı.

const foods = ['🧀','🌶','🍉'];
const animals = ['🦞','🐁','🐕'];

revFoods = foods.reverse();
revAnimals = animals.reverse();

Bu sadece çok basit bir fonksiyondur, ancak bu bir DRY parçasına dönüştürülebilir:

const foods = ['🧀','🌶','🍉'];
const animals = ['🦞','🐁','🐕'];

let reverse = (input) => {
  return input.reverse();
}

revFoods = reverse(foods);
revAnimals = reverse(animals);

Neden bunu yaptın?
Peki, bu kodu biraz daha karmaşık, tam bir sıralama işlevi olarak düşünün ve sıralama anahtarı aniden değişir, şimdi bir kez yapmak yerine iki kez değişiklik yapmanız gerekir.

Bir başka iyi örnek de doğrulamalardır; bu bazen kişisel olarak başarısız olduğumdur.

<?php
class Validator {
    public function validate(array $post)
    {
        if(!isset($post['title']) {
            throw new \Exception('validation failed, no title set');
        }
        if(!isset($post['date']) {
            throw new \Exception('validation failed, no date set');
        }
        if(!isset($post['description']) {
            throw new \Exception('validation failed, no description set');
        }
    }
}

Özel olarak bir ihlal olmasa da, istisnanın değişmesi durumunda bunu iyileştirebilir ve hayatımızı kolaylaştırabiliriz.

<?php
class Validator {

    private $validateAttributes = [
        'title', 
        'date', 
        'description'
    ];

    public function validate(array $post)
    {
        foreach ($this->validateAttributes as $attribute) {
        if (!isset($post[$attribute])) {
            throw new \Exception('validation failed, no '.$attribute.' set');
        }
    }
    }
}

Kaynak

Yorumlar

Bu gönderi için yorum yapılmadı.