Yani kullanacağım temel özellikler için sınıf mı yazmalıyım? Aslında bunu düşünüyordum ancak henüz aşırı büyük bir proje olmadığı için erteliyordum. Şimdiden eklemeli miyim yani?Open Source olması güzel. Kodlar çorba olmuş açıkçası. Bu şekilde sürdürülebilir bir proje değil. Proje büyüdükçe hata ayıklama, yeni özellik ekleme gibi işlemler işkenceye dönüşecektir.
Bunu önlemek için moduler bir mimari kurulabilir.
Yeni bir komut ekleme işlemi projedeki asıl kodları değiştirmemeli. Tek yapman gereken komut dosyasını hazırlamak ve komutlara eklemek olmalı. Bir komut düzenleme işleminde diğer bağımsız komutlar etkilenmemeli. Veya silmek istediğinde direkt komutu tanıttığın kısımdan kaldırman yeterli olmalı.
Komutlar için bir core sınıfı olmalı. Ama bu sınıf herhangi bir komut için çalışacak olan fonksiyonlar olmalı. Mesela getPlatform, getPath vs.
Bir komut için dosya oluşturulur. Komut için bir sınıf oluşturulur. Her komut belli bir temel sınıftan türemeli ki reference işlemleri için bu base sınıfı kullanalım.
Artık asıl projede komutlar dan bağımsızsın. İstediğin kadar ekle çıkar.
Anlatırken çok basit geldi. Ama kodlar Ken öyle olmayabilir. Atladığım kısımlar olabilir.
İstersen C# veya js de basit örnek yapıp atabilirim.
İmzamdaki kodchallenge projem için her dilde yazılan kodları derleme işlemi yapıyorum. Bu anlattığım olaya benzer bir yapısı var. Moduler sistem hayat kurtarır. Yoksa if else yazarak sürünürsün.
Open Source olması güzel. Kodlar çorba olmuş açıkçası. Bu şekilde sürdürülebilir bir proje değil. Proje büyüdükçe hata ayıklama, yeni özellik ekleme gibi işlemler işkenceye dönüşecektir.
Bunu önlemek için moduler bir mimari kurulabilir.
Yeni bir komut ekleme işlemi projedeki asıl kodları değiştirmemeli. Tek yapman gereken komut dosyasını hazırlamak ve komutlara eklemek olmalı. Bir komut düzenleme işleminde diğer bağımsız komutlar etkilenmemeli. Veya silmek istediğinde direkt komutu tanıttığın kısımdan kaldırman yeterli olmalı.
Komutlar için bir Core sınıfı olmalı. Ama bu sınıf herhangi bir komut için çalışacak olan fonksiyonlar olmalı. Mesela getplatform, getpath vs.
Bir komut için dosya oluşturulur. Komut için bir sınıf oluşturulur. Her komut belli bir temel sınıftan türemeli ki reference işlemleri için bu base sınıfı kullanalım.
Artık asıl projede komutlardan bağımsızsın. İstediğin kadar ekle çıkar.
Anlatırken çok basit geldi. Ama kodlarken öyle olmayabilir. Atladığım kısımlar olabilir.
İstersen C# veya JS de basit örnek yapıp atabilirim.
Kodchallenge projem için her dilde yazılan kodları derleme işlemi yapıyorum. Bu anlattığım olaya benzer bir yapısı var. Moduler sistem hayat kurtarır. Yoksa if else yazarak sürünürsün.
Şuan düzenledim. Şuan ki haliyle daha okunabilir olduğunu düşünüyorum. Tabi ki daha da geliştirilmesi gerek.Open Source olması güzel. Kodlar çorba olmuş açıkçası. Bu şekilde sürdürülebilir bir proje değil. Proje büyüdükçe hata ayıklama, yeni özellik ekleme gibi işlemler işkenceye dönüşecektir.
Bunu önlemek için moduler bir mimari kurulabilir.
Yeni bir komut ekleme işlemi projedeki asıl kodları değiştirmemeli. Tek yapman gereken komut dosyasını hazırlamak ve komutlara eklemek olmalı. Bir komut düzenleme işleminde diğer bağımsız komutlar etkilenmemeli. Veya silmek istediğinde direkt komutu tanıttığın kısımdan kaldırman yeterli olmalı.
Komutlar için bir core sınıfı olmalı. Ama bu sınıf herhangi bir komut için çalışacak olan fonksiyonlar olmalı. Mesela getPlatform, getPath vs.
Bir komut için dosya oluşturulur. Komut için bir sınıf oluşturulur. Her komut belli bir temel sınıftan türemeli ki reference işlemleri için bu base sınıfı kullanalım.
Artık asıl projede komutlar dan bağımsızsın. İstediğin kadar ekle çıkar.
Anlatırken çok basit geldi. Ama kodlar Ken öyle olmayabilir. Atladığım kısımlar olabilir.
İstersen C# veya js de basit örnek yapıp atabilirim.
Kodchallenge projem için her dilde yazılan kodları derleme işlemi yapıyorum. Bu anlattığım olaya benzer bir yapısı var. Moduler sistem hayat kurtarır. Yoksa if else yazarak sürünürsün.
Yani Core ismindeki dosyada classları ve arayüzleri, Commands'ta da komutları tutmak gerek. Doğru anladım değil mi? Zaten ona benzer bir sistem kullanıyorum şuan ancak biraz karışık. Basitleştirmem lazım.Commands adinda farkli bir katmanda da komutlari tanimlamalisiniz. Ama unutmayin. Commands katmaninda yapacaginiz degisikliklerin asla Core'u etkilememesi gerekiyor. Core uzerinde yapacaginiz degisikliklerin de Commands katmanini. Zaten eger boyle bir sorun olusursa DependencyHell'e kapildiniz demektir.
Dostlar arkadasin da anlattigi gibi modulerlik onemli. Bir komut baska bir komuta bagimli olmamali. SOLID ilkeleri bunu soyluyor.
Bundan sonra Core olarak adlandiracagim katman temel siniflari ve arayuzleri tutan katmandir.
Ornegin;
Core katmaninda bir soyut sinif olusturun ve adini CommandBase yapin. CommandBase icine virtual olarak olarak Run(gerekli parametreler) methodunu ekleyin.
Commands adinda farkli bir katmanda da komutlari tanimlamalisiniz. Ama unutmayin. Commands katmaninda yapacaginiz degisikliklerin asla Core'u etkilememesi gerekiyor. Core uzerinde yapacaginiz degisikliklerin de Commands katmanini. Zaten eger boyle bir sorun olusursa DependencyHell'e kapildiniz demektir.
Ayrica loglama icin de ayni sistemi kurmalisiniz. Core katmaninda Logging islemlerini soyutlastirin. Sadece method imzalarini yazin. Loggers diye ayri katman olusturup somut siniflarla loggerlarinizi yazin. Bu sekilde ana program dogrudan Loggers katmanına bağlanmayacak. Loggers'ta yaptiginiz degisiklikten Program sinifi etkilenmeyecektir.
Şuan da iki tane küçük modüle sahip proje. Bunları basitleştirmeye çalışacağım.Open Source olması güzel. Kodlar çorba olmuş açıkçası. Bu şekilde sürdürülebilir bir proje değil. Proje büyüdükçe hata ayıklama, yeni özellik ekleme gibi işlemler işkenceye dönüşecektir.
Bunu önlemek için moduler bir mimari kurulabilir.
Yeni bir komut ekleme işlemi projedeki asıl kodları değiştirmemeli. Tek yapman gereken komut dosyasını hazırlamak ve komutlara eklemek olmalı. Bir komut düzenleme işleminde diğer bağımsız komutlar etkilenmemeli. Veya silmek istediğinde direkt komutu tanıttığın kısımdan kaldırman yeterli olmalı.
Komutlar için bir core sınıfı olmalı. Ama bu sınıf herhangi bir komut için çalışacak olan fonksiyonlar olmalı. Mesela getPlatform, getPath vs.
Bir komut için dosya oluşturulur. Komut için bir sınıf oluşturulur. Her komut belli bir temel sınıftan türemeli ki reference işlemleri için bu base sınıfı kullanalım.
Artık asıl projede komutlar dan bağımsızsın. İstediğin kadar ekle çıkar.
Anlatırken çok basit geldi. Ama kodlar Ken öyle olmayabilir. Atladığım kısımlar olabilir.
İstersen C# veya js de basit örnek yapıp atabilirim.
Kodchallenge projem için her dilde yazılan kodları derleme işlemi yapıyorum. Bu anlattığım olaya benzer bir yapısı var. Moduler sistem hayat kurtarır. Yoksa if else yazarak sürünürsün.
İlk baktığıma göre daha iyi. Ama demek istediğim tam olarak bu değil. Mediator desing pattern'ni inceleyebilirsiniz. Benzer bir yapı kurulmalı.Şuan da iki tane küçük modüle sahip proje. Bunları basitleştirmeye çalışacağım.
Boş zamanım olursa fork ederim projeyi.Hocam sizin gibi bilgili birine bu projede ihtiyacımız var yardımcı olma şansınız var mı?
Anladım, bağımlılıkları olabildiğince azaltmam ve bağımlılıkları tek bir merkezden yönetmem lazım.İlk baktığıma göre daha iyi. Ama demek istediğim tam olarak bu değil. Mediator desing pattern'ni inceleyebilirsiniz. Benzer bir yapı kurulmalı.
Mediator desing pattern incelerseniz aslında az çok kafanızda senaryo canlanır. Python hakkında derinlemesine bilgi sahibi değilim. Ama C# da demek istediğim yapıyı basit düzeyde gerçekleştirdim. İncelemeni öneririm.Yani bağımlılıkları olabildiğince azaltmam lazım ve bağımlılıkları tek bir merkezden yönetmem lazım. O zaman bu bağımlılıkları yönetecek bir modül yazmalıyım değil mi?