Anti Pattern Nedir ve Nasıl Kaçınabiliriz?

Anti pattern yazılım geliştirme sürecinde sıkça karşılaşılan, yanlış veya verimsiz uygulamalardır. Anti pattern’ler, projelerin sürdürülebilirliğini zorlaştırabilir, kodun bakımını karmaşıklaştırabilir ve performans problemlerine yol açabilir. Bu makalede, bazı yaygın anti pattern’leri ve bunlardan nasıl kaçınılacağını inceleyeceğiz.

Anti Pattern – Yaygın kullanılan bir kaç örnek

Burada Singleton‘ın yanlış kullanımı, Magic Numbers ve God Object anti pattern’lerini inceleyeceğiz. Bu anti patternlerin açıklamalarını nasıl oluştuğunu ve kaçınma yöntemlerini de kod örnekleri ile inceleyeceğiz. En nihayetinde neden patternlerin dışına çıkmamalıyız konusuna açıklık getirmiş olacağız. Design Pattern yani Tasarım desenleri konusunda yazdığım yazımı da okuyabilirsiniz.

God Object (Tanrı Nesnesi) Anti Pattern

God Object, tek bir sınıfın çok fazla sorumluluk üstlenmesi durumudur. Bu, nesneye yönelik tasarım ilkelerine aykırıdır ve kodun bakımını zorlaştırır.

Kötü Örnek:
public class GodObject {
    public void saveUser(String username) {
        // Registering the user
    }

    public void sendEmail(String email, String message) {
        // Email sending process
    }

    public void generateReport() {
        // Report creation process
    }
}

Yukarıdaki örnekte, GodObject sınıfı birden fazla sorumluluğa sahiptir: kullanıcı kaydetme, e-posta gönderme ve rapor oluşturma. Bu tür bir tasarım, sınıfın bakımı zorlaştırır ve test edilebilirliğini azaltır.

İyi Örnek:
public class UserService {
    public void saveUser(String username) {
        // Kullanıcıyı kaydetme işlemi
    }
}

public class EmailService {
    public void sendEmail(String email, String message) {
        // E-posta gönderme işlemi
    }
}

public class ReportService {
    public void generateReport() {
        // Rapor oluşturma işlemi
    }
}

Bu örnekte, her sınıf yalnızca tek bir sorumluluğa sahiptir, bu da kodun daha okunabilir, bakımı daha kolay ve test edilebilir olmasını sağlar.

Singleton Pattern’in Yanlış Kullanımı

Singleton pattern, belirli bir sınıfın yalnızca bir örneğinin bulunmasını garanti altına almak için kullanılır. Ancak, bu pattern’in yanlış kullanımı, özellikle global değişkenler gibi kullanıldığında, bağımlılıkları artıracak ve test edilebilirliği azaltacaktır.

Kötü Örnek:
public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    public void doSomething() {
        // Do Something
    }
}

Bu kullanım, Singleton nesnesinin global bir değişken gibi kullanılmasına neden olacaktır ve kodun çeşitli yerlerinde bağımlılıklar yaratacaktır.

İyi Örnek:
public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }

    public void doSomething() {
        // Do Something
    }
}

Bu örnekte, Singleton nesnesi final olarak tanımlanmıştır, bu da onun thread-safe olmasını sağlar ve daha kontrollü bir kullanım sunar.

Magic Numbers (Büyülü Sayılar) Anti Pattern

Magic Numbers, kodda sabit değerlerin (örneğin, 3, 100, vb.) anlamlı bir isim verilmeden doğrudan kullanılmasıdır. Bu, kodun anlaşılmasını ve bakımını zorlaştırır.

Kötü Örnek:
public class Calculator {
    public int calculateDiscount(int price) {
        return price - 5;
    }
}

Bu örnekte, 5 sayısı magic number olarak kullanılmıştır ve bu indirim değerinin ne anlama geldiği belli değildir.

İyi Örnek:
public class Calculator {
    private static final int DISCOUNT_AMOUNT = 5;

    public int calculateDiscount(int price) {
        return price - DISCOUNT_AMOUNT;
    }
}

public class Calculator {
private static final int DISCOUNT_AMOUNT = 5;

public int calculateDiscount(int price) {
    return price - DISCOUNT_AMOUNT;
}

}

Bu örnekte, DISCOUNT_AMOUNT sabiti kullanılarak kodun okunabilirliği artırılmıştır ve magic number problemi çözülmüştür.

Sonuç

Kısacası anti pattern, yazılım geliştirme sürecinde karşılaşabileceğimiz yaygın hatalardır. God Object, Singleton pattern’in yanlış kullanımı ve Magic Numbers gibi anti pattern’ler, kodun bakımını zorlaştırıp aynı zamanda da performans problemlerine yol açabilirler. Bu makalede, bu anti pattern’lerin nasıl önlenebileceğini gösterdik.

Paylaşmak ister misin?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir