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.
İçerik
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.