Strategy patternine ihtiyacınız var, ben öyle anladım.
Kısaca yapısı şöyle (Java syntaxı ile anlatmaya çalışıyorum ama siz anlarsınız, kodu da pseudocode olarak yazıyorum o yüzden code tagleri kullanmadım)
Dbstrategy diye bir interface, içinde executeQuery diye tek bir method
public interface dbstrategy
{
Public Void executeQuery();
}
Bu interface i implemente eden birkaç tane alt sınıf olsun, implemente eden sınıflar executeQuery methodunu override ederler, bunların constructorları da farklı parametreler alırlar. Örneğin şöyle;
public class sqlstrategy implements dbstrategy
{
//Getter setter vb.
//Constructor
Public sqlstrategy(sqlcommand, parameternames, hostIp, username, password vb. vb. Gibi )
{//Bla bla
}
@Override
Public Void executeQuery()
{
//Sql ile execute işlemi
}
}
Mesela MongoDB için şöyle bir fark olur,
public class mongodbstrategy implements dbstrategy
{
//Getter setter vb.
//Constructor
Public mongodbstrategy(mongoquery, connectionString, queryMaxTimeout vb. vb.)
{
//Bla bla
}
@Override
Public Void executeQuery()
{
//Mongodb ile execute işlemi
}
}
dB işlemini execute edecek olan sınıfın adını executor koyalım; bu sınıf içinde bu işlem için bizi ilgilendiren methodun adı da execute olsun;
public class executor
{
//Başka methodlar, getterlar setterlar vb.
Public Void execute(dbStrategy strategy)
{
Strategy.executeQuery();
}
}
Execute işlemi, sizin ona yollayacağınız dbstrategy sınıfının executeQuery methodunu çalıştıran bir tür controllerdır.
Şimdi bu kod nasıl çalışır? Ben proje içinde a işlemi için SQL kullanacağım, b işlemi için MongoDB kullanacağım diyelim, şöyle istek atarım:
A işlemi
executor. Execute(New sqlstrategy(sqlcommand, parameternames, "10.0.0.1", "admin", "sqlpasswordum". Vb.))
-Verdiğim parametreler ile yeni bir sqlstrategy nesnesi (dbStrategy interfacei) oluşur.
-Executor sınıfının execute işlemine parametre olarak bu dbStrategy nesnesi gider
-Queryyi execute etme sorumluluğu kime ait? Strategy nesnesine ait. Ben ne tür bir strategy nesnesi gönderdim parametre olarak? SQL tipinde bir strategy nesnesi gönderdim. Gönderdiğim strategy nesnesi ne ise execute işlemini o yapar yani sqlcommand objesini alır, SQL dbsine bağlanır ve executeQuery methodu çalışır.
B işlemi
executor. Execute(New mongodbstrategy(mongoquery, "MongoDB://localhost: 27017", "1000". Vb.))
-Bu sefer mongodbstrategy diye bir dbstrategy interfacei oluşturuldu.
-Execute işlemini yapacak olan sınıf mondodbstrategy sınıfıdır. Gönderdiğim bilgiler ve query parametrelerine göre bağlanır ve execute işlemini yapar.
Benim bildiğim aynı işlemi farklı parametreler ile yapan clean code a uygun kod böyle yazılır, farklı DB'lerde çalışma durumu için size böyle bir örnek verdim, aslında farklı dosya sistemleri ile çalışması istenen, farklı OS üzerinde çalışılacak ve farklı settinglere sahip olması istenen, ya da farklı encoding (mesela eski bir sistemde ASCII iken TR Windows bir sistemde CP1254 kullanacak) işlemleri gereken vb. durumlarda kullandığımız bir patterndir. Sizin sorununuzu doğru anladıysam ve sizin işinizi görecek şey bu verdiğim örnektekine benzer bir şeylerse strategy design patternini araştırabilirsiniz.