Inheritance ve Tree yapısı #45
Labels
No labels
General
InspectionModule
QualityModule
TrainingModule
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
numankaraaslan/FactoryPlatform#45
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary.md dosyasına baktığında göreceksin, bir üretim birimi tanımlandığında üst birim veya diğer bir üretim biriminin alt birimi olarak tanımlanmasına olanak tanınıyor. Diğer bir durum da bir üst birimde çalışabilmek için alt birimlerde tanımlı olan tüm yetkinliklere sahip olmam gerekiyor. Yani alt birimlerdeki yetkinliklerin toplamı bana üst birimde çalışma yetkisi kazandırıyor. Bu şekilde bir tasarım yaparken üretim birimi yerleşiminin çizimi ve tanımı (iki üst birim aynı anda bir alt birime bağlı olamıyor), bir birimde çalışmak için alakasız bir birimin yetkisine sahip olunması gerektiği gibi (makinede çalışma yetkisi almam için bu makineye bağlı kalite istasyonunun yetkisine sahip olmam gerekiyor) bazı noktalarda sıkıntı yaratıyor. Bu yapıyı kaldırmamın sakıncaları ve avantajları konusunu karşılaştırıp karar vermeme yardımcı olabilir misin?
Bu tasarım aslında klasik bir hiyerarşik yetkinlik mirası (hierarchical competency inheritance) problemi ve sen şu anda bunun “yan etkileriyle” karşılaşmışsın. Yazdıklarına bakılırsa mevcut yapı:
Üretim birimi = ağaç (tree)
Yetkinlikler = birimlere bağlı
Üst birimde çalışmak için → alt birimlerin toplam yetkinlikleri gerekiyor
Ayrıca dolaylı bağımlılıklar oluşuyor (makine → kalite istasyonu gibi)
Bu yaklaşım teorik olarak tutarlı ama pratikte coupling (bağımlılık) çok artmış.
Aşağıda bunu kaldırmanın avantajları vs riskleri net şekilde karşılaştırayım:
🔴 Mevcut Yapı (Alt → Üst Yetkinlik Toplanır)
✔️ Avantajlar
Hiçbir şeyi atlamazsın:
Üst birimde çalışan biri → tüm alt operasyonları bilir
“Eksik yetkinlikle çalışma” ihtimali çok düşük
👉 Özellikle regülasyonlu sektörlerde (otomotiv, havacılık) bu çok değerlidir.
Şu kural nettir:
Parent Competency = Union(All Child Competencies)
Bu deterministik bir modeldir → sistemde “yorum” yoktur.
Birine “neden burada çalışabiliyor?” diye sorulduğunda:
→ alt birimlere kadar izlenebilir
❌ Dezavantajlar (senin yaşadıkların)
Bir birimde değişiklik → her yeri etkiliyor
Örnek:
Kalite istasyonuna yeni yetkinlik eklendi
→ Makine operatörleri artık çalışamaz hale geldi
👉 Bu yanlış bağımlılık (false dependency)
Gerçekte:
Makine operatörü ≠ kalite operatörü
Ama sistem diyor ki:
“Makinede çalışmak için kalite yetkinliği de lazım”
👉 Bu domain hatası
“İki üst birim aynı alt birime bağlı olamıyor”
Çünkü:
Tree kullanıyorsun (graph değil)
Ama gerçek dünya:
Shared resources var
👉 Senin model: tree
👉 Gerçek dünya: graph
Yetkinlik nereden geliyor belli değil
Debug etmek zor:
“Bu yetkinlik neden gerekli?” → 5 seviye yukarıdan geliyor olabilir
Her kontrol recursive
Cache vs gerektirir
🟢 Bu Yapıyı Kaldırmak (Flat / Explicit Model)
Önerilen alternatif:
👉 Her üretim birimi:
Sadece kendi yetkinliklerini tanımlar
Parent-child sadece organizasyonel olur
Yetkinlik inheritance kaldırılır (veya opsiyonel yapılır)
✔️ Avantajlar
Makine → sadece makine yetkinliği ister
Kalite → sadece kalite ister
👉 Domain doğru olur
Artık:
Aynı alt birim birden fazla üstte olabilir (graph’a geçebilirsin)
Cross-functional yapı kurabilirsin
3. Anlaşılabilirlik artar
Bir birim için:
Required Competencies = Directly Assigned Ones
👉 Debug kolay:
“Bu yetkinlik neden gerekli?” → çünkü burada tanımlı
4. Organizasyon değişikliklerine dayanıklı
Bir yere yeni yetkinlik eklemek:
sadece o birimi etkiler
5. UI sadeleşir
Kopyalama / miras / gizli kurallar yok
❌ Dezavantajlar
Artık şunu unutabilirsin:
Alt birim yetkinliği eklemeyi
👉 Sonuç:
Eksik yetkinlikle çalışma olabilir
2. Veri tekrarı (duplication)
Aynı yetkinlik:
10 farklı birimde tekrar tanımlanabilir
3. Yönetim yükü artar
Eskiden:
1 yerde tanımla → her yere yayılır
Şimdi:
Her yere tek tek ekle
4. Tutarsızlık riski
Aynı tip makinelerde farklı gereksinimler olabilir (yanlışlıkla)
⚖️ Karşılaştırma (Özet)
Kriter Mevcut (Inherited) Yeni (Explicit)
Güvenlik ⭐⭐⭐⭐ ⭐⭐⭐
Esneklik ⭐⭐ ⭐⭐⭐⭐⭐
Anlaşılabilirlik ⭐⭐ ⭐⭐⭐⭐⭐
Domain doğruluğu ⭐⭐ ⭐⭐⭐⭐⭐
Bakım kolaylığı ⭐⭐ ⭐⭐⭐⭐
Bağımlılık yönetimi ❌ kötü ✅ iyi
💡 En Sağlıklı Yaklaşım (Tavsiye)
Bence tamamen kaldırmak yerine:
👉 Hybrid Model (en iyi çözüm)
Unit → sadece kendi yetkinliklerini ister
Bir flag:
inheritParentCompetencies = true/false
3. “Suggested competencies” mantığı
Parent’tan:
otomatik ZORUNLU değil
sadece öneri olarak gelir
4. Decoupling (çok kritik)
Şunu kaldır:
“Makine → kalite yetkinliği zorunlu”
Bunun yerine:
Cross-unit dependency explicit olsun
Örn:
Machine Unit requires:
👉 Hidden dependency yok
🔥 Net Görüşüm
Senin yaşadığın problemler şunu gösteriyor:
Modelin şu an teknik olarak doğru ama domain olarak yanlış
Özellikle:
kalite ↔ üretim bağımlılığı
tree zorlaması
👉 Bu yüzden:
✔️ Inheritance’ı zorunlu olmaktan çıkar
✔️ Yetkinlikleri explicit yap
✔️ İstersen opsiyonel inheritance ekle
İstersen sana:
yeni entity modeli (JPA)
graph tabanlı yapı
competency resolution algoritması
tasarlayıp somut hale getirebilirim.