1.
solid programlama prensiplerinin d harfidir. özetlemek gerekirse yüksek seviyeli sınıfların düşük seviyeli sınıfları soyut halleriyle kullanmasıdır. bu da bağımlılığın düşmesini sağlamaktadır. eğer biz bunu somut olarak kullanırsak ilerde kodumuzun spagetti koda dönüşmesi çok olasıdır. ondan sonra yoldaş benjamin franklin gelip bizi fırçalaması içten bile değil.
haydi şimdi bunu nasıl kullanırız onu görelim.
öncelikle bir tane interface oluşturalım.
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/23/c9yqrzcqwvv86se0-t.jpg)
daha sonra bu interface bildiğiniz gibi onu implement eden sınıfların referansını tutar. daha doğrusu bunun için kullanırız. işte bu yüzden iki tane veri tabanı işlemlerini yapan class oluşturalım ve bunları implement ettirelim.
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/24/dvd7ifbicwf7avm7-t.jpg)
daha sonra custumer manager oluşturalım. burada constructor içinde dependency injection yaptım. yani artık bağımlılığımız dışardan parametre olarak geliyor. ve bu bağımlılık ıkafasozluksql intefacesini implement eden class olmak zorunda. yani artık bu gelen bağımlılıkta gelen şeyi istediğiniz gibi kodlayabilirsiniz. ilerde kodlarınızda değişiklik yapmadan yeni bir bağımlılık gönderebilirsiniz.
ama eğer biz bunu gevşek bağımlılık değil de, sıkı bağımlılık yapsaydık örnek olarak => kafasozlukmicrosoftserver server = new kafasozlukmicrosoftserver(); diye olsaydı server. add(); dediğimiz yerde biz "new kafasozlukmicrosoftserver();" bu oluşturduğumuz objeye sıkı sıkıya bağımlı olacaktık. yarın patron gelip biz oracle server geçiyoruz dediğinde tüm kodları baştan yazmamız gerekecekti.
bağımlığı aldığıma göre artık kendi dosyamda bunu istediğim gibi kullanabilirim. öteki dosyaları yazan arkadaşım istediği gibi değişiklik yapsın ben o objelerin referansını almam yeterli olacaktır.
https://media.normalsozluk.com/up/2021/05/24/tpriesxnatjgpyt5.jpg
yarın (link: https://kafasozluk.com/yazar/yoldas-benjamin-franklin--48::yoldaş benjamin) geldi dedi biz mssql geçiyoruz, tamam dedik. tek yapacağım değişiklik şu olacaktır.
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/23/wiwc9ehx7gfotfaf-t.jpg)
ondan sonra yoldaş benjamin franklin dedi ki biz yeni özel veri tabanı yönetim sistemi yazdık artık kafasözlükservere göre ekleme yapılacak.
arkadaşım hemen şu kodu yazdı;
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/23/fria47h3bkvtr8wu-t.jpg)
ben ise hiçbir koduma dokunmadan aynı şekilde burayı değiştirdim.
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/23/p6ne5ybv4dljfbao-t.jpg)
yani sadece gelecek referansı değiştirdim. ama ben bunu new() ile kodlasaydım kodlarımı tekrar tekrar düzenlemem gerekecekti. veya if else döngüsüne girecektim. ayrıca bana özel bir istek gelirse sql sorgularını yazan arkadaşımla hiç muhatap olmama gerek yok. o gelen referansı kendi dosyamdan istediğim gibi yönetebilirim.
artıları :
1.büyük projelerde kodları yönetmeyi kolaylaştırıyor.
2.çalışan kişiler birbirlerine bağımlı olmadan kodlarını kendilerine göre yönetebiliyor.
eksileri :
1.küçük çaplı projelerde gereksiz olabiliyor.
2.cpu ve ram kaynaklarının sınırlı olduğu durumlarda kullanmadan önce bir kere daha düşünülmelidir.
3.projeye bir katman daha eklenir, karmaşıklık artar. (küçük projeler için.)
dependency ınversion konusundan çok daha fazlasını anlattık aslında. kendinize iyi bakın. sözlüğü de düzeltin linkler ön izleme yaparken doğru görünmüyor. :'(
edit: resimleri düzenledim karışmış.
haydi şimdi bunu nasıl kullanırız onu görelim.
öncelikle bir tane interface oluşturalım.
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/23/c9yqrzcqwvv86se0-t.jpg)
daha sonra bu interface bildiğiniz gibi onu implement eden sınıfların referansını tutar. daha doğrusu bunun için kullanırız. işte bu yüzden iki tane veri tabanı işlemlerini yapan class oluşturalım ve bunları implement ettirelim.
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/24/dvd7ifbicwf7avm7-t.jpg)
daha sonra custumer manager oluşturalım. burada constructor içinde dependency injection yaptım. yani artık bağımlılığımız dışardan parametre olarak geliyor. ve bu bağımlılık ıkafasozluksql intefacesini implement eden class olmak zorunda. yani artık bu gelen bağımlılıkta gelen şeyi istediğiniz gibi kodlayabilirsiniz. ilerde kodlarınızda değişiklik yapmadan yeni bir bağımlılık gönderebilirsiniz.
ama eğer biz bunu gevşek bağımlılık değil de, sıkı bağımlılık yapsaydık örnek olarak => kafasozlukmicrosoftserver server = new kafasozlukmicrosoftserver(); diye olsaydı server. add(); dediğimiz yerde biz "new kafasozlukmicrosoftserver();" bu oluşturduğumuz objeye sıkı sıkıya bağımlı olacaktık. yarın patron gelip biz oracle server geçiyoruz dediğinde tüm kodları baştan yazmamız gerekecekti.
bağımlığı aldığıma göre artık kendi dosyamda bunu istediğim gibi kullanabilirim. öteki dosyaları yazan arkadaşım istediği gibi değişiklik yapsın ben o objelerin referansını almam yeterli olacaktır.
https://media.normalsozluk.com/up/2021/05/24/tpriesxnatjgpyt5.jpg
yarın (link: https://kafasozluk.com/yazar/yoldas-benjamin-franklin--48::yoldaş benjamin) geldi dedi biz mssql geçiyoruz, tamam dedik. tek yapacağım değişiklik şu olacaktır.
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/23/wiwc9ehx7gfotfaf-t.jpg)
ondan sonra yoldaş benjamin franklin dedi ki biz yeni özel veri tabanı yönetim sistemi yazdık artık kafasözlükservere göre ekleme yapılacak.
arkadaşım hemen şu kodu yazdı;
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/23/fria47h3bkvtr8wu-t.jpg)
ben ise hiçbir koduma dokunmadan aynı şekilde burayı değiştirdim.
![kullanıcı tarafından yüklenmiş görsel](https://media.normalsozluk.com/up/2021/05/23/p6ne5ybv4dljfbao-t.jpg)
yani sadece gelecek referansı değiştirdim. ama ben bunu new() ile kodlasaydım kodlarımı tekrar tekrar düzenlemem gerekecekti. veya if else döngüsüne girecektim. ayrıca bana özel bir istek gelirse sql sorgularını yazan arkadaşımla hiç muhatap olmama gerek yok. o gelen referansı kendi dosyamdan istediğim gibi yönetebilirim.
artıları :
1.büyük projelerde kodları yönetmeyi kolaylaştırıyor.
2.çalışan kişiler birbirlerine bağımlı olmadan kodlarını kendilerine göre yönetebiliyor.
eksileri :
1.küçük çaplı projelerde gereksiz olabiliyor.
2.cpu ve ram kaynaklarının sınırlı olduğu durumlarda kullanmadan önce bir kere daha düşünülmelidir.
3.projeye bir katman daha eklenir, karmaşıklık artar. (küçük projeler için.)
dependency ınversion konusundan çok daha fazlasını anlattık aslında. kendinize iyi bakın. sözlüğü de düzeltin linkler ön izleme yaparken doğru görünmüyor. :'(
edit: resimleri düzenledim karışmış.
devamını gör...