Bu proje, Arcadia şehrindeki uzmanları (tesisatçı, elektrikçi, vb.) vatandaş talepleriyle eşleştiren, dinamik fiyatlama ve rota planlama yapan bir platformdur. Nesne Yönelimli Programlama (NYP) ve İleri C# dersi kapsamında geliştirilmiştir.
- Bu depoyu klonlayın:
git clone https://github.com/Hyperinflation/UstaPlatform-NYP-Projesi.git - Visual Studio (2022 veya üzeri önerilir) ile
UstaPlatform.slndosyasını açın. UstaPlatform.Appprojesini başlangıç projesi olarak ayarlayın.- Projeyi derleyin ve çalıştırın.
- SOLID Prensipleri:
- OCP (Open/Closed Principle): Fiyatlandırma motoru (
PricingEngine),IPricingRulearayüzünü uygulayan yeni DLL'ler (örneğinUstaPlatform.PricingRules.Extra.dll) aracılığıyla yeni fiyat kurallarını dinamik olarak yükleyebilir. Ana uygulama kodunun (UstaPlatform.App) değişmesine gerek kalmaz. - SRP (Single Responsibility Principle): Her sınıfın (örneğin
Usta,Talep,PricingEngine,UstaPlatformService) belirli bir sorumluluğu vardır. - DIP (Dependency Inversion Principle):
PricingEnginegibi üst seviye modüller, somut kural sınıflarına değil,IPricingRulegibi soyutlamalara (arayüzlere) bağlıdır.
- OCP (Open/Closed Principle): Fiyatlandırma motoru (
- C# Özellikleri:
init-onlyproperty'ler (Usta.Id,Talep.KayitZamanigibi) nesne oluşturulduktan sonra değiştirilemez.- Nesne başlatıcılar (
new Usta { Id = 1, Ad = "Ahmet" }) kodun okunabilirliğini artırır. Schedulesınıfı bir dizinleyici (this[DateOnly date]) içerir.RoutesınıfıIEnumerable<(int X, int Y)>arayüzünü uygular ve koleksiyon başlatıcıları ({ (1, 2), (3, 4) }) ile kullanılabilir.- Statik yardımcı sınıflar (
Guard,MoneyFormatter,GeoHelper) genel hizmetleri sağlar.
- Plug-in Mimarisi:
PricingEngine, belirtilen klasördeki (./Plugins) DLL'leri tarar,IPricingRulearayüzünü uygulayan sınıfları bulur ve örneklerini oluşturarak fiyat hesaplamasında kullanır. Bu, uygulamayı esnek ve genişletilebilir kılar.
- Uygulama başlatılır.
./Pluginsklasöründe bulunanUstaPlatform.PricingRules.Extra.dll(içerisindeAcilCagriUcretiKurali) gibi DLL'ler taranır veIPricingRuleuygulayan sınıflar bulunur ve yüklenebilir.- Test verileri (Vatandaşlar, Ustalar, Talepler) tanımlanır.
UstaPlatformServicearacılığıylaProcessRequestAndAssignMastermetodu çağrılır.- Uygun usta bulunur, fiyat
PricingEngineve yüklenen kurallarla hesaplanır,IsEmrioluşturulur veSchedule'a eklenir. CalculateAndSetRouteForDatemetodu ile belirli bir tarih için rota ve toplam mesafeGeoHelperkullanılarak hesaplanır.- Sonuçlar konsola yazdırılır.
Not: Yeni bir fiyat kuralı DLL'si (
YeniKural.dll)./Pluginsklasörüne kopyalandığında, uygulama yeniden başlatıldığında bu yeni kural da otomatik olarak fiyat hesaplamasına dahil edilecektir.