Soru : Hocam şimdi dediğiniz gibi iki adet method açısından çok şık ve mantıklı duruyor ancak bu durum şöyle olsaydı Cloud sınıfında 100 adet method olsaydı Google bunlardan 20 sini, AWS bunlardan 50 sini Azure ise 45 ini kapsıyor ve bunlardan arta kalanlarda diğer sınıflarda bir kullanılıyor bir kullanılmıyor olsa idi bu kapsayanlar için tek bir abstract yapıpta kapsamayanların her biri için ayrı ayrı interface tanımlıyor olacaktık nihai hedefe ulaşmak için , ancak haliyle bu durumda Google sınıfı : Cloud ,Ix,Iy,Iz........Ibilmemne gibi epey bir interface yi implemente etmesi best practice veya kod yazımına aykırı bir durum mudur.Biraz karışık oldu ama umarım anlatabilmişimdir derdimi.Şimdiden teşekkürler.
2 года назад+3
Evet, öyle olacaktı ve bu durum o ihtiyaca istinaden hiçte best practices yahut kod yazımı açısından aykırı bir durum olmayacaktı. Zaten esas o tarz yoğun operasyonların söz konusu olduğu senaryolar için bu prensipler daha elverişli ortamlar sağlamaktadırlar. Sevgiler...
hocam diyelim ki Google ve AWS biz projeyi geliştirdiğimiz esnada her ikisi de hem translate hem de machine learning süreçlerini yönetebilsin. Bizde bu süreci oluşturduğumuz Cloud abstract classı üzerinden IoC container üzerinden Cloud nesnesi aracılığıyla yönetelim. İlerleyen süreçte AWS artık translate hizmeti vermediğini açıkladığını varsayalım. ITranslatable arayüzü oluşturup süreci onun üzerinden yürütmek istediğimizde artık Cloud nesnesi üzerinden Translate methodunu çağıramaz duruma gelicez ve tüm proje üzerinde Cloud nesnesinin kullanıldığı her yerde değişiklik yapmak gerekecek. Aşağıdaki işlemde tüm süreci Cloud nesnesi üzerinden yönettim. public class CloudController : ControllerBase { private Cloud _cloud; public CloudController(Cloud cloud) { _cloud = cloud; } [HttpGet("translate")] public IActionResult Translate(string x) { _cloud.Translate(); return Ok(x); } [HttpGet("maclearn")] public IActionResult MachineLearning(string x) { _cloud.MachineLearning(); return Ok(x); } } Buradaki işlemde de translate işlemini farklı bir arayüz(ITranslatable) ile sağladım. public class CloudController : ControllerBase { private Cloud _cloud; private ITranslatable _translatable; public CloudController(Cloud cloud, ITranslatable translatable) { _cloud = cloud; _translatable = translatable; } [HttpGet("translate")] public IActionResult Translate(string x) { _translatable.Translate(); return Ok(x); } [HttpGet("maclearn")] public IActionResult MachineLearning(string x) { _cloud.MachineLearning(); return Ok(x); } } Bu iki operasyon arasında translate operasyonunu değiştirmek için, "_cloud.Translate()" işlemi yerine "_translatable.Translate()" işlemini kullandım. Büyük bir projede onlarca farklı yerde bu işlemi düzeltmek zor ve maliyetli olur diye düşünüyorum. Mimariyi bu süreçte nasıl daha doğru hale getirebiliriz?
Liskov adı nereden geliyor diye merak edenler için adını "Barbara Liskov" adlı bilgisayar uzmanı ablamızdan almıştır. İnşallah bir gün biz de milli gururumuz "Gencay Principles" olarak yazılım dunyasında yer edinecegiz :)
7 месяцев назад+1
Bizim prensibimiz yıllar öncesinde duyuruldu kardeşim... Ameleus :) Adı kanımızda saklı :)
Teşekkürler hocam. Bu prensip ile Interface Segregation çok karışıyor ki bunda da çözüm Interface e ayırarak yaptık hatta IMachinelearning interface i olarak ayırsaydık ki ayırabilirdik o zaman tam ISP oluyordu o zaman Cloud diye birşey kalmayacaktı. Burada amaç Cloud gibi bir sınıftan kesinlikle kalıtım alındığı durumlar mı?
2 года назад+6
Aslında karışmıyor. Liskov, alt sınıfların kendi aralarında problemsiz yer değiştirebilmesini öneriyor. Bunun için bizler problem yaratabilecek davranışları ayırma ve kullanılacak sınıflara dahil etme yöntemini kullanıyoruz. Burada ISP'den temeldeki farklardan biri niyet bir diğer ise ortak olan davranışlar varsa base'de tutulmasıdır. ISP'de ise farklı yettenekleri farklı arayüzlerle temsil etmek gibi bir niyet var. Evet, Liskov ile paralellik arz edebilir ama zaten prensipler ve hatta pattern'lar içe içedir diyebiliriz. Ayriyeten Liskov, Open/Closed prensibinin de amca oğludur diyebiliriz. Nihayetinde sistemde ITranslatable interface'inin genişletilebilirlik özelliği söz konusu olabilmektedir. Bu açıdan OCP'ye benzerlik göstermektedir. Bir yandan da OCP'ye bakarsanız özünde Dependency Inversion prensibiyle paralel doğrultudadır. .. Felan :) Yani SOLID prensiplerinin hepsi('S' hariç), aşağı yukarı soyutlama konusunda mutabıklardır ve bu soyutlamanın doğru noktada kullanılması konusunda farklarını ortaya koymaktadırlar diyebiliriz. Sevgiler.
EĞİTİME YENİ BAŞLAYAN ARKADAŞLARA HİTABEN ! Onlarca video izledin, x,y,z platformlardan bir çok eğitim satın aldın, aradın taradın günler haftalar aylar geçti hasbel kader buraya geldin sonunda doğru yerdesin👏 Evet şuan Tek Kişilik Dev Kadro GENÇAY YILDIZ👑hocamız ile burası NG AKDEMİ. İzlediğin videolarda anlamadığın bir yer olmayacak garanti veriyorum. Sabırlı ol !! Notlarını güzelce al. Birde senden küçük bir ricamız olacak kanalımızı yani artık senin kanalını başka platformlarda forumlarda işte okulda çevrende her yerde paylaşmanı istiyorum. Çünkü bu kanal memleketin yazılım meselesini kendine görev edinmiş bir kanal. Şu dizelerle birlikte iyi çalışmalar diliyorum. Gidilecek yol uzun, Öğrenecek şey fazla, Yanmak gerek, Sabretmek gerek...
puzzle yapmak gibi her bir parçayı yerine cuk diye oturtuyorsunuz. üstelik çok açıklayıcı bir şekilde anlatıyorsunuz teşekkürler
Yazılım işini anlamak isteyenler için kanalınız bir hazinedir hocam.
videoya başlamadan yorumumuzu yapalım. emeğiniz için teşekkürler hocam
Teşekkürler, buradaki örnekleri shorts olarak paylaşarak daha fazla kişilere ulaşılabilir
Bu bir destek mesajıdır. SOLID - Liskov Substitution Principle #5 - Design Principles Eğitimleri
Beklene yeni video gelmiş hemen girdik emeğinize sağlık
hocam verdiğiniz örnekler çok iyi, hem ideal olan hem de olmayan senaryoyu gördüğümde konu kafamda cuk diye oturuyor
Akıyor maşallah bu hafta kanal hocam.
Budur, Elinize sağlık hocam.
çok anlaşılır bir anlatım, teşekkürler
hocam harikasiniz. yine mukemmel videolar geliyor. ve aciklayici olmasi ile tam oturuyor
tesekkurler
Allah razı olsun hocam tek kelimeyle efsanesiniz
emeğinize sağlık hocam. teşekkürler
Emeğinize sağlık Hocam
süper anlatım, teşekkürler.
Kapsamlı bir reaktif programlama eğitimi gelir mi hocam?
Teşekkürler hocam
Elinize sağlık hocam süpersiniz..
14:28 aman hocam 😄 (ağzınıza sağlık çok iyi anlatmışsınız.)
Teşekkürler hocamm
16.10.2022 izledim. SOLID - Liskov Substitution Principle #5 - Design Principles Eğitimleri
Değerli bilgileriniz için saolun hocam
Cok sagolun.
💯💯💯
Thank you Sir
Soru : Hocam şimdi dediğiniz gibi iki adet method açısından çok şık ve mantıklı duruyor ancak bu durum şöyle olsaydı Cloud sınıfında 100 adet method olsaydı Google bunlardan 20 sini, AWS bunlardan 50 sini Azure ise 45 ini kapsıyor ve bunlardan arta kalanlarda diğer sınıflarda bir kullanılıyor bir kullanılmıyor olsa idi bu kapsayanlar için tek bir abstract yapıpta kapsamayanların her biri için ayrı ayrı interface tanımlıyor olacaktık nihai hedefe ulaşmak için , ancak haliyle bu durumda Google sınıfı : Cloud ,Ix,Iy,Iz........Ibilmemne gibi epey bir interface yi implemente etmesi best practice veya kod yazımına aykırı bir durum mudur.Biraz karışık oldu ama umarım anlatabilmişimdir derdimi.Şimdiden teşekkürler.
Evet, öyle olacaktı ve bu durum o ihtiyaca istinaden hiçte best practices yahut kod yazımı açısından aykırı bir durum olmayacaktı. Zaten esas o tarz yoğun operasyonların söz konusu olduğu senaryolar için bu prensipler daha elverişli ortamlar sağlamaktadırlar.
Sevgiler...
hocam diyelim ki Google ve AWS biz projeyi geliştirdiğimiz esnada her ikisi de hem translate hem de machine learning süreçlerini yönetebilsin. Bizde bu süreci oluşturduğumuz Cloud abstract classı üzerinden IoC container üzerinden Cloud nesnesi aracılığıyla yönetelim. İlerleyen süreçte AWS artık translate hizmeti vermediğini açıkladığını varsayalım. ITranslatable arayüzü oluşturup süreci onun üzerinden yürütmek istediğimizde artık Cloud nesnesi üzerinden Translate methodunu çağıramaz duruma gelicez ve tüm proje üzerinde Cloud nesnesinin kullanıldığı her yerde değişiklik yapmak gerekecek.
Aşağıdaki işlemde tüm süreci Cloud nesnesi üzerinden yönettim.
public class CloudController : ControllerBase
{
private Cloud _cloud;
public CloudController(Cloud cloud)
{
_cloud = cloud;
}
[HttpGet("translate")]
public IActionResult Translate(string x)
{
_cloud.Translate();
return Ok(x);
}
[HttpGet("maclearn")]
public IActionResult MachineLearning(string x)
{
_cloud.MachineLearning();
return Ok(x);
}
}
Buradaki işlemde de translate işlemini farklı bir arayüz(ITranslatable) ile sağladım.
public class CloudController : ControllerBase
{
private Cloud _cloud;
private ITranslatable _translatable;
public CloudController(Cloud cloud, ITranslatable translatable)
{
_cloud = cloud;
_translatable = translatable;
}
[HttpGet("translate")]
public IActionResult Translate(string x)
{
_translatable.Translate();
return Ok(x);
}
[HttpGet("maclearn")]
public IActionResult MachineLearning(string x)
{
_cloud.MachineLearning();
return Ok(x);
}
}
Bu iki operasyon arasında translate operasyonunu değiştirmek için, "_cloud.Translate()" işlemi yerine "_translatable.Translate()" işlemini kullandım. Büyük bir projede onlarca farklı yerde bu işlemi düzeltmek zor ve maliyetli olur diye düşünüyorum. Mimariyi bu süreçte nasıl daha doğru hale getirebiliriz?
müko
👍👍
👏👏
KİNG!
Liskov adı nereden geliyor diye merak edenler için adını "Barbara Liskov" adlı bilgisayar uzmanı ablamızdan almıştır. İnşallah bir gün biz de milli gururumuz "Gencay Principles" olarak yazılım dunyasında yer edinecegiz :)
Bizim prensibimiz yıllar öncesinde duyuruldu kardeşim... Ameleus :) Adı kanımızda saklı :)
28:17
Teşekkürler hocam. Bu prensip ile Interface Segregation çok karışıyor ki bunda da çözüm Interface e ayırarak yaptık hatta IMachinelearning interface i olarak ayırsaydık ki ayırabilirdik o zaman tam ISP oluyordu o zaman Cloud diye birşey kalmayacaktı. Burada amaç Cloud gibi bir sınıftan kesinlikle kalıtım alındığı durumlar mı?
Aslında karışmıyor. Liskov, alt sınıfların kendi aralarında problemsiz yer değiştirebilmesini öneriyor. Bunun için bizler problem yaratabilecek davranışları ayırma ve kullanılacak sınıflara dahil etme yöntemini kullanıyoruz. Burada ISP'den temeldeki farklardan biri niyet bir diğer ise ortak olan davranışlar varsa base'de tutulmasıdır. ISP'de ise farklı yettenekleri farklı arayüzlerle temsil etmek gibi bir niyet var. Evet, Liskov ile paralellik arz edebilir ama zaten prensipler ve hatta pattern'lar içe içedir diyebiliriz.
Ayriyeten Liskov, Open/Closed prensibinin de amca oğludur diyebiliriz. Nihayetinde sistemde ITranslatable interface'inin genişletilebilirlik özelliği söz konusu olabilmektedir. Bu açıdan OCP'ye benzerlik göstermektedir.
Bir yandan da OCP'ye bakarsanız özünde Dependency Inversion prensibiyle paralel doğrultudadır. .. Felan :)
Yani SOLID prensiplerinin hepsi('S' hariç), aşağı yukarı soyutlama konusunda mutabıklardır ve bu soyutlamanın doğru noktada kullanılması konusunda farklarını ortaya koymaktadırlar diyebiliriz.
Sevgiler.
Funda Bismillah
🛠⚒📙✏👍💯🤣
Alet cantasinda gerek olmayan bir aleti cantaya koyma. Yani base classta sub classin kullanmayacagi method ya da property tanimlama. Ahlakli ol.
CUK
EĞİTİME YENİ BAŞLAYAN ARKADAŞLARA HİTABEN !
Onlarca video izledin, x,y,z platformlardan bir çok eğitim satın aldın, aradın taradın günler haftalar aylar geçti hasbel kader buraya geldin sonunda doğru yerdesin👏
Evet şuan Tek Kişilik Dev Kadro GENÇAY YILDIZ👑hocamız ile burası NG AKDEMİ.
İzlediğin videolarda anlamadığın bir yer olmayacak garanti veriyorum. Sabırlı ol !! Notlarını güzelce al.
Birde senden küçük bir ricamız olacak kanalımızı yani artık senin kanalını başka platformlarda forumlarda işte okulda çevrende her yerde paylaşmanı istiyorum. Çünkü bu kanal memleketin yazılım meselesini kendine görev edinmiş bir kanal. Şu dizelerle birlikte iyi çalışmalar diliyorum.
Gidilecek yol uzun,
Öğrenecek şey fazla,
Yanmak gerek,
Sabretmek gerek...
Teşekkürler hocam
Emeğinize sağlık hocam. Teşekkürler