Birçok işletim sistemi üzerinde çalışan terminal projesi

user.cs

Hectopat
Katılım
2 Kasım 2020
Mesajlar
1.923
Makaleler
14
Çözümler
33
Yer
Dünya
Herkese merhaba,
@asd674 ile beraber çoğu işletim sistemi üzerinde çalışacak bir terminal geliştiriyoruz. Projeye buradan ulaşabilirsiniz. Program open-source olacağı için kaynak dosyalarını kendinize göre şekillendirebilirsiniz. Bulduğunuz hataları söylerseniz çok yardımcı olmuş olursunuz. Teşekkürler.

  • backdir => Bulunulan dosya veya dizinin konumuna döner.
  • finddir => Buradan bulunduğunuz dizin içindeki bir dosyaya gidebilirsiniz. Yazdıktan sonra gitmek istediğiniz dosya/klasörün numarasını yazın.
  • listdir => finddir komutunun aksine sadece dosyaları listeler.
  • run => Bulunulan dosyayı çalıştırmanızı sağlar. Şimdilik Linux'ta çalışmıyor.
Projemizi daha çok geliştirmeye çalışacağız.
 
Son düzenleyen: Moderatör:
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.
 
Son düzenleyen: Moderatör:
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.
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 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.

Hocam sizin gibi bilgili birine bu projede ihtiyacımız var yardımcı olma şansınız var 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.
Şuan düzenledim. Şuan ki haliyle daha okunabilir olduğunu düşünüyorum. Tabi ki daha da geliştirilmesi gerek.
 
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.
 
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.
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.

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.
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.
Şuan da iki tane küçük modüle sahip proje. Bunları basitleştirmeye çalışacağım.
 
Son düzenleme:
Şuan da iki tane küçük modüle sahip proje. Bunları basitleştirmeye çalışacağı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ı.

Hocam sizin gibi bilgili birine bu projede ihtiyacımız var yardımcı olma şansınız var mı?
Boş zamanım olursa fork ederim projeyi.
 
İ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ı.
Anladım, bağımlılıkları olabildiğince azaltmam ve bağımlılıkları tek bir merkezden yönetmem lazım.

Şuan ki hali ile nasıl?
 
Son düzenleme:
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?
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.
 

Geri
Yukarı