Skip to content

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

 
 
 

Contributors

Languages