Skip to content

RuleEngine Demo for Python with complexity Calculation

License

ErtugrulKra/PythonRuleEngine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rule Engine vs Branching Complexity Comparison

Bu proje, indirim hesaplama işlemlerinde Branching ve Rule Engine yaklaşımlarının Cyclomatic Complexity ve Cognitive Complexity metriklerine göre karşılaştırılmasını yapar.

📋 Proje Açıklaması

Proje, kullanıcı üyelik türü, yaş ve bölge bilgilerine göre fiyat indirimleri hesaplayan iki farklı yaklaşımı karşılaştırır:

  1. Branching Yaklaşımı: Geleneksel if-elif-else yapıları kullanarak koşullu mantık
  2. Rule Engine Yaklaşımı: Kurallar ve aksiyonlar tanımlayarak esnek bir sistem

🚀 Özellikler

  • ✅ İki farklı yaklaşımın sonuçlarını karşılaştırma
  • ✅ Cyclomatic Complexity analizi
  • ✅ Cognitive Complexity analizi
  • ✅ Sonuç doğrulama ve tutarlılık kontrolü
  • ✅ Detaylı complexity metrikleri ve karşılaştırma raporu

📊 Complexity Metrikleri

Cyclomatic Complexity

  • Branching: 5
  • Rule Engine: 4

Cognitive Complexity

  • Branching: 8
  • Rule Engine: 6

🛠️ Kurulum

Gereksinimler

  • Python 3.6+
  • Hiçbir ek kütüphane gerekmez (sadece standart kütüphaneler kullanılır)

Kurulum Adımları

# Repository'yi klonlayın
git clone https://github.com/ErtugrulKra/PythonRuleEngine.git

# Proje dizinine gidin
cd PythonRuleEngine

# Kodu çalıştırın
python main.py

📁 Proje Yapısı

RuleEngine/
├── main.py              # Ana uygulama dosyası
├── rule_engine.py       # Rule Engine sınıfı
└── README.md           # Bu dosya

🔧 Kullanım

Temel Kullanım

python main.py

Çıktı Örneği

======================================================================
COMPLEXITY KARŞILAŞTIRMASI
======================================================================

1. BRANCHING YÖNTEMİ COMPLEXITY ANALİZİ:
--------------------------------------------------
   Fonksiyon: calculate_discount_branching
   Cyclomatic Complexity: 5
   Cognitive Complexity: 8

2. RULE ENGINE YÖNTEMİ COMPLEXITY ANALİZİ:
--------------------------------------------------
   Engine Method:
     Cyclomatic Complexity: 0
     Cognitive Complexity: 0
   Rules:
     Cyclomatic Complexity: 4
     Cognitive Complexity: 6
   Toplam:
     Cyclomatic Complexity: 4
     Cognitive Complexity: 6

3. COMPLEXITY KARŞILAŞTIRMASI:
--------------------------------------------------
   Cyclomatic Complexity:
     Daha basit: Rule Engine
     Fark: 1 puan
   Cognitive Complexity:
     Daha basit: Rule Engine
     Fark: 2 puan

4. GENEL DEĞERLENDİRME:
--------------------------------------------------
   ✓ Rule Engine yöntemi her iki complexity metrikinde de daha basit
   ✓ Rule Engine yöntemi daha kolay anlaşılır ve bakımı yapılabilir

📈 Sonuçlar ve Analiz

Complexity Karşılaştırması

Metrik Branching Rule Engine Kazanan
Cyclomatic Complexity 5 4 Rule Engine
Cognitive Complexity 8 6 Rule Engine

Avantajlar

Rule Engine Yaklaşımı

  • ✅ Daha düşük complexity skorları
  • ✅ Kuralların kolayca eklenmesi/çıkarılması
  • ✅ Daha modüler ve esnek yapı
  • ✅ Test edilebilirlik

Branching Yaklaşımı

  • ✅ Daha basit ve anlaşılır kod
  • ✅ Daha az overhead
  • ✅ Doğrudan kontrol akışı

🔍 Kod Örnekleri

Branching Yaklaşımı

def calculate_discount_branching(user):
    if user["membership"] == "gold":
        if user["age"] > 18:
            message = f"{user['membership'].title()} adult member"
            final_price = user["base_price"] * 0.80  # %20 indirim
        else:
            message = f"{user['membership'].title()} young member"
            final_price = user["base_price"] * 0.85  # %15 indirim
    elif user["membership"] == "silver":
        if user["region"] == "EU":
            message = f"{user['membership'].title()} EU member"
            final_price = user["base_price"] * 0.95  # %5 indirim
        else:
            message = "Regular member"
            final_price = user["base_price"]
    else:
        message = "Regular member"
        final_price = user["base_price"]
    
    return {"message": message, "final_price": final_price}

Rule Engine Yaklaşımı

def setup_rule_engine():
    engine = RuleEngine()
    
    engine.add_rule(
        lambda u: u["membership"] == "gold" and u["age"] > 18,
        lambda u: {
            "message": f"{u['membership'].title()} adult member",
            "final_price": u["base_price"] * 0.80
        }
    )
    
    engine.add_rule(
        lambda u: True,  # default
        lambda u: {
            "message": "Regular member",
            "final_price": u["base_price"]
        }
    )
    
    return engine

🧪 Test Verileri

Proje, 10 farklı kullanıcı profili ile test edilmiştir:

users = [
    {"age": 25, "membership": "gold", "region": "EU", "base_price": 100},
    {"age": 17, "membership": "gold", "region": "US", "base_price": 120},
    {"age": 30, "membership": "silver", "region": "EU", "base_price": 80},
    # ... daha fazla test verisi
]

📚 Complexity Metrikleri Hakkında

Cyclomatic Complexity

  • Kodun kaç farklı yoldan çalışabileceğini ölçer
  • if, elif, else, for, while, try-except gibi dallanma noktalarını sayar
  • Düşük değerler daha basit kod anlamına gelir

Cognitive Complexity

  • Kodun anlaşılması için gereken zihinsel çabayı ölçer
  • İç içe geçmiş yapıları ve mantıksal operatörleri dikkate alır
  • Düşük değerler daha kolay anlaşılır kod anlamına gelir

🤝 Katkıda Bulunma

  1. Bu repository'yi fork edin
  2. Yeni bir branch oluşturun (git checkout -b feature/amazing-feature)
  3. Değişikliklerinizi commit edin (git commit -m 'Add some amazing feature')
  4. Branch'inizi push edin (git push origin feature/amazing-feature)
  5. Bir Pull Request oluşturun

📄 Lisans

Bu proje MIT lisansı altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakın.

👨‍💻 Geliştirici

Ertugrul Kara

📞 İletişim

Sorularınız için GitHub Issues kullanabilir veya @ErtugrulKra ile iletişime geçebilirsiniz.


⭐ Bu projeyi beğendiyseniz yıldız vermeyi unutmayın!

About

RuleEngine Demo for Python with complexity Calculation

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages