# FikoYT 3D Sistem - Mega Refactoring Planı

**Tarih:** 2026-03-20
**Hazırlayan:** 50 Paralel Araştırma Ajanı
**Kapsam:** Tüm 3D engine merkezileştirme, kod azaltma, performans, OOP

---

## MEVCUT DURUM ÖZETİ

| Metrik | Değer | Durum |
|--------|-------|-------|
| Ana component | 3,967 satır, 182 property | GOD OBJECT |
| FikoSecililer | 8,496 satır, 11 sorumluluk | MEGA MONOLITH |
| Toplam 3D dosya | 569+ .ts dosyası | Dağınık |
| fiko-performance | 60+ modül, çoğu placeholder | %80 kullanılmıyor |
| GPU optimization | 45+ system, çoğu null | Placeholder |
| requestAnimationFrame | 44 ayrı loop | DRY ihlali |
| Raycaster instance | 43 ayrı | Duplicate |
| Event listener leak | 28 eksik remove | MEMORY LEAK |
| Memory pool kullanımı | %10-20 | Altyapı var, adoption yok |
| Import pipeline | %35 code duplication | DRY ihlali |
| LOD sistemi | 5 dosya, 3'ünde tekrar | Merge gerekli |
| Edge render | 3 farklı yol | Birleştirme gerekli |
| Frustum culling | 2 ayrı hesaplama | Duplicate |
| Dimension sınıfları | 18 adet THREE.Group | Interface eksik |
| HDR/IBL | Tamamen yok | Görsel kalite |
| Texture pooling | Yok | VRAM leak |
| RenderTarget dispose | 25 eksik | Kritik leak |

---

## MİMARİ VİZYON

### Mevcut: God Object + Scattered Modules
```
FikoThreeJsComponent (3967 satır)
  ├── 182 property (herşey burada)
  ├── 45+ GPU system (çoğu null)
  ├── 44 RAF loop (her yerde)
  └── 569 dosya (düzensiz)
```

### Hedef: Service + Plugin + Event Bus
```
Fiko3DEngineService (core, ~500 satır)
  ├── RendererService (WebGL/WebGPU lifecycle)
  ├── SceneService (scene graph)
  ├── CameraService (kontroller)
  ├── SelectionService (raycast, highlight)
  ├── MaterialService (pool, cache, factory)
  ├── EventBus (merkezi iletişim)
  ├── ConfigService (ayarlar, preset'ler)
  ├── PerformanceService (LOD, culling, monitoring)
  └── PluginHost (lazy-loadable feature modülleri)
      ├── ImportPlugin (STEP/STL/OBJ)
      ├── MeasurementPlugin (ölçüm)
      ├── DFMPlugin (analiz)
      ├── AnnotationPlugin (metin notu)
      ├── SectionPlugin (kesit)
      ├── SPHPlugin (döküm simülasyonu)
      ├── DexelPlugin (CNC simülasyonu)
      └── DefectPlugin (kusur tahmin)
```

---

## REFACTORING FAZLARI

### FAZ 0: Acil Bug Fix (Risk=0, 1 gün)

**Kritik memory leak'leri düzelt:**
1. `fiko-three-js.component.ts` — 10 event listener leak (ngOnDestroy'a remove ekle)
2. `FikoScreenshot.ts` — document.mousemove listener hiç remove edilmiyor
3. `FikoGlowEdgesHelper.ts` — window.mousemove listener hiç remove edilmiyor
4. 25 WebGLRenderTarget — dispose() çağrısı eksik dosyalara ekle

### FAZ 1: Event Bus + Utility (Risk=Düşük, 1 hafta)

**1.1 Merkezi Event Bus oluştur:**
```typescript
class Fiko3DEventBus {
  yayinla(tip: string, veri?: any): void
  dinle(tip: string, callback: Function): () => void
}
```
- Mevcut doğrudan referansları event'e çevir
- Component → Component yerine Component → EventBus → Component

**1.2 Merkezi Buffer Pool standardize:**
- FikoMemoryPooling altyapısı harika ama %10 kullanılıyor
- Tüm hot-path `new THREE.Vector3` → pool.acquire() dönüştür
- Tüm hot-path `new Float32Array` → TypedArrayPool kullan

**1.3 Merkezi RAF Loop:**
- 44 ayrı requestAnimationFrame → tek `Fiko3DRenderLoop`
- Subsystem'ler `subscribe(callback)` ile katılır

### FAZ 2: Service Extraction (Risk=Orta, 2 hafta)

**2.1 FikoRendererService** (~300 satır)
- WebGL/WebGPU renderer lifecycle
- Canvas resize, pixel ratio
- Post-processing pipeline
- Shadow map konfigürasyonu

**2.2 FikoCameraService** (~200 satır)
- FikoOrthoKamera + FikoKontrolCad wrapper
- View presets (front/back/top/bottom/iso)
- Camera animation (zoom fit, orbit)
- View bookmarks

**2.3 FikoSelectionService** (~200 satır)
- FikoSecililer wrapper (facade)
- Selection state signal'ler
- Highlight konfigürasyonu
- Multi-tier raycast orchestration

**2.4 FikoMaterialService** (~200 satır)
- Material pool/cache (FikoMaterialPool wrapper)
- Texture pool (YENİ — VRAM leak önleme)
- RenderTarget lifecycle (YENİ — 25 leak fix)
- Material factory (preset'ler)

**2.5 FikoConfigService** (~200 satır)
- Tüm ayarlar merkezi (90+ ayar)
- localStorage persistence
- Preset sistemi (performance/quality/precision)
- Type-safe interface (any → FikoThreeJSConfig)

### FAZ 3: FikoSecililer Modüleştirme (Risk=Yüksek, 2 hafta)

8,496 satırlık monolith → 5 modül:

**3.1 RaycastManager** (~600 satır)
- collectAndRaycast, filterIntersections, enrichIntersections
- GPU/WASM/CPU cascade

**3.2 EdgePickingEngine** (~1500 satır)
- Screen-space edge selection
- Spatial index, LOD

**3.3 HighlightRenderer** (~1800 satır)
- Line2 pool, material cache
- Face/edge/vertex highlight

**3.4 InteractionController** (~2000 satır)
- Pointer/touch/context menu events
- Hover throttling, prediction

**3.5 SelectionStateManager** (~800 satır)
- Tree-3D senkronizasyon
- Multi-select state

**FikoSecililer (Facade)** (~400 satır)
- Public API korunur (backward compat)
- İç modüllere delegate

### FAZ 4: Import Pipeline Refactor (Risk=Orta, 1 hafta)

**4.1 BaseImporter abstract class:**
- Ortak post-load ritual merge (8 yerde tekrarlanan kod)
- Unified progress callback
- Worker pool integration

**4.2 ImporterRegistry:**
- Strategy pattern (format → importer mapping)
- Plugin-based format desteği
- Yeni format ekleme: 1 dosya yaz, registry'ye ekle

**4.3 Export pipeline:**
- STL/OBJ/glTF export ekleme
- Unified ExporterRegistry

### FAZ 5: Plugin Mimarisi (Risk=Orta, 2 hafta)

**5.1 Plugin Interface:**
```typescript
interface IFiko3DPlugin {
  id: string;
  baslat(engine: IFiko3DEngine): Promise<void>;
  durdur(): void;
  temizle(): void;
}
```

**5.2 Plugin'lere dönüştürülecek feature'lar:**
- Ölçüm sistemi → MeasurementPlugin
- DFM analiz → DFMPlugin
- Anotasyon → AnnotationPlugin
- Kesit görünümü → SectionPlugin
- SPH simülasyon → SPHPlugin
- Dexel simülasyon → DexelPlugin
- Kusur tahmin → DefectPlugin

**5.3 Lazy loading:**
- Her plugin route-level lazy import
- Aktif olmayan plugin → 0 byte yükleme

### FAZ 6: Performance Cleanup (Risk=Düşük, 1 hafta)

**6.1 Dead code temizleme:**
- 45+ null/placeholder GPU modülü → kaldır veya stub'a dönüştür
- Kullanılmayan export'lar temizle
- console.log/console.warn production'dan kaldır

**6.2 LOD birleştirme:**
- 5 LOD dosyasındaki 3 tekrar → ortak LODCore

**6.3 Edge render birleştirme:**
- 3 yol → tek instanced renderer + variant'lar

**6.4 Culling merkezileştirme:**
- 2 frustum hesaplaması → tek CullingManager

### FAZ 7: Ana Component Slim (Risk=Yüksek, 1 hafta)

**3,967 satır → ~500 satır:**
- Tüm logic service'lerde
- Component sadece: template, ViewChild, lifecycle hook
- inject() ile 8-10 service
- Signal-based state

---

## STRANGLER FIG MİGRASYON STRATEJİSİ

Her faz için:
1. Yeni service/modül oluştur (eski kodun YANINDA)
2. Proxy metodlar yaz (eski API korunur)
3. Yeni koddan service kullan
4. Eski kodu kademeli service'e taşı
5. Test (mevcut davranış korunmalı)
6. Proxy'leri kaldır

**Rollback planı:** Her commit geri alınabilir, feature flag ile eski/yeni arasında geçiş.

---

## PERFORMANS HEDEFLERI

| Metrik | Mevcut | Hedef | Strateji |
|--------|--------|-------|----------|
| Bundle size | ~250KB (FikoSecililer) | ~150KB | Modüleştirme |
| Init time | ~2s | ~500ms | Lazy load |
| Frame budget (interaction) | 6-8ms | 4-6ms | RAF merge |
| Frame budget (full quality) | 12-14ms | 8-10ms | Render queue |
| Memory pool adoption | %10-20 | %80+ | Zorunlu pool |
| Event listener leaks | 28 | 0 | EventManager |
| VRAM leaks | 25+ RT | 0 | ResourceTracker |
| Dead code | ~5000 satır | 0 | Cleanup |

---

## PRIORITY MATRIX (Etki × Efor)

```
         YÜKSEK ETKİ
            │
   Faz 0    │   Faz 1     Faz 3
   (Bug fix) │  (Event+Pool) (Secililer)
            │
DÜŞÜK ──────┼────────────── YÜKSEK
EFOR        │               EFOR
            │
   Faz 6    │   Faz 2     Faz 5
   (Cleanup) │  (Services)  (Plugins)
            │
         DÜŞÜK ETKİ
```

**Önerilen sıra:** 0 → 1 → 2 → 6 → 4 → 3 → 5 → 7

---

## SONUÇ

Bu refactoring planı mevcut fonksiyonelliği **hiç bozmadan**, Strangler Fig pattern ile kademeli geçiş sağlar. Toplam tahmini süre: **8-10 hafta** (1 geliştirici). Her faz bağımsız commit'lenebilir ve geri alınabilir.

**En kritik 3 aksiyon:**
1. **Faz 0:** 28 memory leak düzelt (1 gün)
2. **Faz 1:** Event bus + unified RAF loop (1 hafta)
3. **Faz 2:** Service extraction (2 hafta)

Bu 3 faz tamamlandığında ana component 3,967 → ~1,500 satıra düşer ve maintenance dramatik kolaylaşır.

---

*Bu plan 50 paralel araştırma ajanının 3D kodbase analizi sonuçlarına dayanmaktadır.*
