Tekil Örneği Değiştirme: Refactoring 018
Merhaba, bu makalede **Tekil Örneği Değiştirme** (Replace Singleton) adlı refactoring tekniğini ele alacağız. Bu teknik, kodunuzda tekil desenin kullanımını ele almak ve daha esnek, test edilebilir ve bakımı kolay bir yapıya dönüştürmek için kullanılır.
Tekil Örneği Değiştirme Neden Gereklidir?
Tekil desen, bir sınıftan yalnızca bir örnek oluşturulmasını sağlar ve bu örnek, uygulamanın herhangi bir yerinden erişilebilir hale getirir. Tekil desenin bazı avantajları olsa da, birkaç dezavantajı da vardır:
- **Sınıfları test etmek zorlaşır**: Tekil örneğe bağlı olan diğer sınıfların bağımlılıklarını çözmek zor olabilir, bu da test edilebilirliği azaltır.
- **Çıkarımlar oluşturmak zorlaşır**: Tekil örneğe bağlı olan diğer sınıfları değiştirmek zor olabilir, bu da kodun bakımı zorlaştırır.
- **Ölçeklenebilirlik sorunları**: Tekil örneğe bağlı olan diğer sınıflar tekil örneğe bağımlı hale gelir, bu da uygulamanın ölçeklenebilirliğini azaltabilir.
Tekil Örneği Değiştirme Nasıl Yapılır?
Tekil örneği değiştirmek için aşağıdaki adımları izleyebilirsiniz:
- **Tekil sınıfı arayüze dönüştürün**: Tekil sınıfın arayüzünü tanımlayın ve tekil sınıfın kullandığı yöntemleri arayüze ekleyin.
- **Yeni bir sınıf oluşturun**: Tekil sınıfın arayüzünü uygulayan yeni bir sınıf oluşturun ve tekil sınıfın işlevselliğini bu yeni sınıfa taşıyın.
- **Tekil sınıfı ortadan kaldırın**: Tekil sınıfın kullanımlarını yeni sınıfla değiştirin ve tekil sınıfı projenizden kaldırın.
- **Tekil sınıfın arayüzünü kullanın**: Tekil sınıfın yerine, diğer sınıflar arayüzü kullanmalıdır.
Örnek: Tekil Bir Veritabanı Bağlantısı Sınıfı
Aşağıdaki kod, bir veritabanına bağlantı sağlayan bir tekil sınıfın basit bir örneğini gösterir:
“`java
public class DatabaseConnection {
private static DatabaseConnection instance;
private Connection connection;
private DatabaseConnection() {
// Veritabanına bağlantı kur
}
public static DatabaseConnection getInstance() {
if (instance == null) {
instance = new DatabaseConnection();
}
return instance;
}
public Connection getConnection() {
return connection;
}
}
“`
Bu kodu tekil örneği değiştirmek için aşağıdaki adımları izleyebiliriz:
- **Arayüzü tanımla**:
“`java
public interface IConnectionProvider {
Connection getConnection();
}
“` - **Yeni sınıfı oluştur**:
“`java
public class DefaultConnectionProvider implements IConnectionProvider {
private Connection connection;public DefaultConnectionProvider() {
// Veritabanına bağlantı kur
}@Override
public Connection getConnection() {
return connection;
}
}
“` - **Tekil sınıfı ortadan kaldır**: `DatabaseConnection` sınıfını projeden kaldırın ve diğer sınıfların `DefaultConnectionProvider` sınıfını kullanmasını sağlayın.
- **Arayüzü kullan**:
“`java
// Diğer sınıflar, IConnectionProvider arayüzünü kullanmalıdır
IConnectionProvider connectionProvider = new DefaultConnectionProvider();
Connection connection = connectionProvider.getConnection();
“`
Tekil Örneği Değiştirmenin Faydaları
Tekil örneği değiştirmenin birkaç faydası vardır:
- **Daha iyi test edilebilirlik**: Tekil örneği ortadan kaldırarak, sınıfları bağımlılıklardan ayırırız ve bu da test etmeyi kolaylaştırır.
- **Daha iyi bakılabilirlik**: Tekil örneği ortadan kaldırarak, kodun bakımı kolaylaşır, çünkü tekil sınıfa bağlı olan diğer sınıfları değiştirmek zorunda kalmayız.
- **Daha iyi ölçeklenebilirlik**: Tekil örneği ortadan kaldırarak, uygulamanın ölçeklenebilirliğini artırırız, çünkü tekil örneğe bağlı olan diğer sınıflar artık sınırlı değildir.
Sonuç
Tekil örneği değiştirme, tekil desenin kullanımını ele almak ve kodun daha esnek, test edilebilir ve bakımı kolay hale getirmek için faydalı bir refactoring tekniğidir. Bu tekniği kullanarak, uygulamanızın kalitesini artırabilir ve daha fazla esneklik ve ölçeklenebilirlik elde edebilirsiniz.
#Etiketler
#TekilÖrneğiDeğiştirme #Refactoring #TekilDesen #OOP #YazılımGeliştirme #KodKalitesi #TestEdilebilirlik #Bakım #Ölçeklenebilirlik #Java #C# #Python #JavaScript #PHP #Kotlin #Swift #Dart #TypeScript #VeritabanıBağlantısı #Arayüz #Sınıflar #BağımlılıkÇözümü #FatihSoysal
