İlk aşamada projeyi Beyin (UstaPlatform.Domain), Eklentiler (UstaPlatform.Rules) ve Ana Program (UstaPlatform.App) olarak üçe ayırdım. 1-Beyin (UstaPlatform.Domain): Bu projeye Usta, IsEmri gibi temel sınıfları ve en önemlisi, tüm fiyat kurallarının uymak zorunda olduğu IPricingRule adında bir arayüz (bir nevi şablon) koydum. Bu proje en temelde duruyor ve kimseye bağımlı değil. 2- Eklentiler (UstaPlatform.Rules): Bunlar Rules.Haftasonu gibi küçük projeler. Hepsi Domain'deki IPricingRule şablonunu alıp içini dolduruyor .Her biri ayrı bir .dll dosyası üretiyor. 3-UstaPlatform.App (Ana Program): Burası konsol uygulaması. İçine PricingEngine (Fiyat Motoru) adında bir sınıf yazdım. Bu motor program açılırken plugins diye bir klasöre bakıyor, içindeki tüm .dll'leri bulup okuyor ve IPricingRule şablonuna uyan kuralları hafızaya atıyor. Fiyat hesaplarken de bu listedeki tüm kuralları sırayla çalıştırıyor.
-- Nasıl Çalıştırılır? --
- Öncelikle tüm projeleri derleyin.
- UstaPlatform.App projesinin çalıştırılabilir dosyasının (UstaPlatform.App\bin\Debug\net6.0) içindeki "plugins" klasörüne gidin.
- Eklentiler (UstaPlatform.Rules) projesinin derlenmiş .dll dosyalarını (örneğin Rules.Haftasonu.dll) bu "plugins" klasörüne kopyalayın.
- Şimdi UstaPlatform.App projesini çalıştırabilirsiniz. Program, "plugins" klasöründeki tüm kuralları otomatik olarak yükleyecek ve fiyat hesaplamalarında kullanacaktır.
-- Nasıl Yeni Kural Eklenir? --
- UstaPlatform.Rules projesine yeni bir sınıf ekleyin (örneğin Rules.OzelIndirim).
- Bu sınıfın IPricingRule arayüzünü implemente ettiğinden emin olun ve gerekli metotları doldurun.
- Projeyi derleyin. Yeni .dll dosyasını "plugins" klasörüne kopyalayın.
- UstaPlatform.App projesini yeniden başlatın. Yeni kural otomatik olarak yüklenecektir.
-- Notlar --
- Her kuralın doğru çalıştığından emin olmak için birim testleri yazmayı unutmayın.
- Fiyat hesaplama sırasını değiştirmek isterseniz, PricingEngine sınıfında kuralları yükleme sırasını düzenleyebilirsiniz.
- Gelecekte yeni kurallar eklemek oldukça kolay olacak şekilde tasarlandı, bu yüzden ihtiyaç duydukça yeni eklentiler oluşturabilirsiniz.
- Herhangi bir sorunla karşılaşırsanız, lütfen proje dokümantasyonuna veya kaynak koduna bakın.
- İyi çalışmalar ve başarılar dilerim!