Skip to content

Commit a33a255

Browse files
committed
initial commit for codes
1 parent 4b1c64e commit a33a255

File tree

4 files changed

+591
-0
lines changed

4 files changed

+591
-0
lines changed

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2024 Ertugrul Kara
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
# Rule Engine vs Branching Complexity Comparison
2+
3+
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.
4+
5+
## 📋 Proje Açıklaması
6+
7+
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:
8+
9+
1. **Branching Yaklaşımı**: Geleneksel if-elif-else yapıları kullanarak koşullu mantık
10+
2. **Rule Engine Yaklaşımı**: Kurallar ve aksiyonlar tanımlayarak esnek bir sistem
11+
12+
## 🚀 Özellikler
13+
14+
- ✅ İki farklı yaklaşımın sonuçlarını karşılaştırma
15+
- ✅ Cyclomatic Complexity analizi
16+
- ✅ Cognitive Complexity analizi
17+
- ✅ Sonuç doğrulama ve tutarlılık kontrolü
18+
- ✅ Detaylı complexity metrikleri ve karşılaştırma raporu
19+
20+
## 📊 Complexity Metrikleri
21+
22+
### Cyclomatic Complexity
23+
- **Branching**: 5
24+
- **Rule Engine**: 4
25+
26+
### Cognitive Complexity
27+
- **Branching**: 8
28+
- **Rule Engine**: 6
29+
30+
## 🛠️ Kurulum
31+
32+
### Gereksinimler
33+
- Python 3.6+
34+
- Hiçbir ek kütüphane gerekmez (sadece standart kütüphaneler kullanılır)
35+
36+
### Kurulum Adımları
37+
```bash
38+
# Repository'yi klonlayın
39+
git clone https://github.com/ErtugrulKra/PythonRuleEngine.git
40+
41+
# Proje dizinine gidin
42+
cd PythonRuleEngine
43+
44+
# Kodu çalıştırın
45+
python main.py
46+
```
47+
48+
## 📁 Proje Yapısı
49+
50+
```
51+
RuleEngine/
52+
├── main.py # Ana uygulama dosyası
53+
├── rule_engine.py # Rule Engine sınıfı
54+
└── README.md # Bu dosya
55+
```
56+
57+
## 🔧 Kullanım
58+
59+
### Temel Kullanım
60+
```python
61+
python main.py
62+
```
63+
64+
### Çıktı Örneği
65+
```
66+
======================================================================
67+
COMPLEXITY KARŞILAŞTIRMASI
68+
======================================================================
69+
70+
1. BRANCHING YÖNTEMİ COMPLEXITY ANALİZİ:
71+
--------------------------------------------------
72+
Fonksiyon: calculate_discount_branching
73+
Cyclomatic Complexity: 5
74+
Cognitive Complexity: 8
75+
76+
2. RULE ENGINE YÖNTEMİ COMPLEXITY ANALİZİ:
77+
--------------------------------------------------
78+
Engine Method:
79+
Cyclomatic Complexity: 0
80+
Cognitive Complexity: 0
81+
Rules:
82+
Cyclomatic Complexity: 4
83+
Cognitive Complexity: 6
84+
Toplam:
85+
Cyclomatic Complexity: 4
86+
Cognitive Complexity: 6
87+
88+
3. COMPLEXITY KARŞILAŞTIRMASI:
89+
--------------------------------------------------
90+
Cyclomatic Complexity:
91+
Daha basit: Rule Engine
92+
Fark: 1 puan
93+
Cognitive Complexity:
94+
Daha basit: Rule Engine
95+
Fark: 2 puan
96+
97+
4. GENEL DEĞERLENDİRME:
98+
--------------------------------------------------
99+
✓ Rule Engine yöntemi her iki complexity metrikinde de daha basit
100+
✓ Rule Engine yöntemi daha kolay anlaşılır ve bakımı yapılabilir
101+
```
102+
103+
## 📈 Sonuçlar ve Analiz
104+
105+
### Complexity Karşılaştırması
106+
107+
| Metrik | Branching | Rule Engine | Kazanan |
108+
|--------|-----------|-------------|---------|
109+
| Cyclomatic Complexity | 5 | 4 | Rule Engine |
110+
| Cognitive Complexity | 8 | 6 | Rule Engine |
111+
112+
### Avantajlar
113+
114+
#### Rule Engine Yaklaşımı
115+
- ✅ Daha düşük complexity skorları
116+
- ✅ Kuralların kolayca eklenmesi/çıkarılması
117+
- ✅ Daha modüler ve esnek yapı
118+
- ✅ Test edilebilirlik
119+
120+
#### Branching Yaklaşımı
121+
- ✅ Daha basit ve anlaşılır kod
122+
- ✅ Daha az overhead
123+
- ✅ Doğrudan kontrol akışı
124+
125+
## 🔍 Kod Örnekleri
126+
127+
### Branching Yaklaşımı
128+
```python
129+
def calculate_discount_branching(user):
130+
if user["membership"] == "gold":
131+
if user["age"] > 18:
132+
message = f"{user['membership'].title()} adult member"
133+
final_price = user["base_price"] * 0.80 # %20 indirim
134+
else:
135+
message = f"{user['membership'].title()} young member"
136+
final_price = user["base_price"] * 0.85 # %15 indirim
137+
elif user["membership"] == "silver":
138+
if user["region"] == "EU":
139+
message = f"{user['membership'].title()} EU member"
140+
final_price = user["base_price"] * 0.95 # %5 indirim
141+
else:
142+
message = "Regular member"
143+
final_price = user["base_price"]
144+
else:
145+
message = "Regular member"
146+
final_price = user["base_price"]
147+
148+
return {"message": message, "final_price": final_price}
149+
```
150+
151+
### Rule Engine Yaklaşımı
152+
```python
153+
def setup_rule_engine():
154+
engine = RuleEngine()
155+
156+
engine.add_rule(
157+
lambda u: u["membership"] == "gold" and u["age"] > 18,
158+
lambda u: {
159+
"message": f"{u['membership'].title()} adult member",
160+
"final_price": u["base_price"] * 0.80
161+
}
162+
)
163+
164+
engine.add_rule(
165+
lambda u: True, # default
166+
lambda u: {
167+
"message": "Regular member",
168+
"final_price": u["base_price"]
169+
}
170+
)
171+
172+
return engine
173+
```
174+
175+
## 🧪 Test Verileri
176+
177+
Proje, 10 farklı kullanıcı profili ile test edilmiştir:
178+
179+
```python
180+
users = [
181+
{"age": 25, "membership": "gold", "region": "EU", "base_price": 100},
182+
{"age": 17, "membership": "gold", "region": "US", "base_price": 120},
183+
{"age": 30, "membership": "silver", "region": "EU", "base_price": 80},
184+
# ... daha fazla test verisi
185+
]
186+
```
187+
188+
## 📚 Complexity Metrikleri Hakkında
189+
190+
### Cyclomatic Complexity
191+
- Kodun kaç farklı yoldan çalışabileceğini ölçer
192+
- if, elif, else, for, while, try-except gibi dallanma noktalarını sayar
193+
- Düşük değerler daha basit kod anlamına gelir
194+
195+
### Cognitive Complexity
196+
- Kodun anlaşılması için gereken zihinsel çabayı ölçer
197+
- İç içe geçmiş yapıları ve mantıksal operatörleri dikkate alır
198+
- Düşük değerler daha kolay anlaşılır kod anlamına gelir
199+
200+
## 🤝 Katkıda Bulunma
201+
202+
1. Bu repository'yi fork edin
203+
2. Yeni bir branch oluşturun (`git checkout -b feature/amazing-feature`)
204+
3. Değişikliklerinizi commit edin (`git commit -m 'Add some amazing feature'`)
205+
4. Branch'inizi push edin (`git push origin feature/amazing-feature`)
206+
5. Bir Pull Request oluşturun
207+
208+
## 📄 Lisans
209+
210+
Bu proje MIT lisansı altında lisanslanmıştır. Detaylar için `LICENSE` dosyasına bakın.
211+
212+
## 👨‍💻 Geliştirici
213+
214+
**Ertugrul Kara**
215+
- GitHub: [@ErtugrulKra](https://github.com/ErtugrulKra)
216+
217+
218+
## 📞 İletişim
219+
220+
Sorularınız için GitHub Issues kullanabilir veya [@ErtugrulKra](https://github.com/ErtugrulKra) ile iletişime geçebilirsiniz.
221+
222+
---
223+
224+
⭐ Bu projeyi beğendiyseniz yıldız vermeyi unutmayın!

0 commit comments

Comments
 (0)