Klasörlerimi Özelliklere Değil Kararlara Göre Diziyorum

Yapay zekayla kod yazarken bir şey fark ettim. Eklemesi kolay, çıkarması zor. Bir özellik istiyorsun, hop, geldi. Ama o özelliği kaldırmak istediğinde, bağımlılıklar her yerde.
Önce feature-bazlı klasör yapısıyla çalışıyordum. Her özellik bir klasör. Klasik. Ama bir süre sonra şunu gördüm: aynı kararı tekrar tekrar veriyorum. Mesela bir panel tasarımı yapmışım clipboard için. Command bar'da da aynı paneli istiyorum. Yeni baştan yapmam mı gerekiyor? Yoksa eski koddan import mu edeyim?
Sorun şuydu: feature'lar karar'ları içine alıyordu. Karar feature'ın hizmetkarı oluyordu. Oysa kararlar feature'lardan daha temel bir şey.
Sonra decision-based architecture'a geçtim. Klasörler artık feature değil, decision. "Panel tasarımı" diye bir hücre. "Renk seçimi" diye bir hücre. "Aksiyon dispatch" diye bir hücre. Her hücre kendi authority'sini manifest ediyor: burada şu konuda karar verilir.
Bunun bir sonucu var: bir hücreyi sildiğinde, ona bağlı her şey silinmiş oluyor. Çünkü bağımlılık decision'a, decision'ı kullanan feature'a değil.
Sonra başka bir şey daha gördüm. Sistemin amacı nedir? Bir sistemin var olma sebebi, sonunda bir aksiyon üretmesi. O zaman bütün sistem aksiyona bağlanmalı.
Ama önemli bir nokta: aksiyon, dışarıdan eklenen bir özelliğin sistemi kendine çekmemeli. Aksiyon, "ben bu command bar'da gözükürüm" diye projection vermeli. Contract aksiyonun kendisinden geliyor, dışarıdan değil.
Sonra şunu fark ettim: aksiyon güzel, sistemin amacı bu. Ama aksiyon bir decision'dan çıkar. Birinin karar vermesi lazım ki aksiyon ortaya çıksın. Agent karar veriyorsa, agent'in decision'lara erişimi olmalı. O zaman file system decision olsun.
Şöyle bir zincir oluştu sonunda:
Sistem aksiyonlara bağlanır
Agent decision'lara bağlanır
Decision'lar authority hücrelerinde durur
Authority hücrelerini insan manifest eder
Bir adım daha gittim. Authority neden var? Bir intent için, bir niyet için. Ama agent niyet bilmez; niyet insana aittir. Sistemde saklanmaz, insan üretir.
İnsan neden niyet üretir? Durum değişir, observe edersin, niyete ulaşırsın.
Son zincir şu: state-change → intent → decision → action.
Bu sıradan bir mimari değil aslında. Bir epistemoloji. İnsanın iç-durumundan dış-aksiyona nasıl geçtiğinin haritası. Üstelik kod olarak yazıldığı için, teoriyi her gün uyguluyorum.
Hâlâ refactor ediyorum. Çünkü her yeni karar zincirin bir yerinde sırıtıyor, oranın daha doğru bir yapısı var.
Son güncelleme
Bu yararlı oldu mu?