Skip to content

Latest commit

 

History

History
112 lines (82 loc) · 3.83 KB

File metadata and controls

112 lines (82 loc) · 3.83 KB

DevCenter Builder - Refactoring-Plan

ATI Task #4610 - Analyse und Refactoring-Vorschlag

Analysierte Dateien

Datei Klasse Zeilen Methoden
src/modules/builder/kompilator.py BuildConfig 20-61 1 (__post_init__)
src/modules/builder/kompilator.py BuildResult 63-79 1 (__post_init__)
src/modules/builder/kompilator.py Kompilator 81-430 9
src/gui/dialogs/build_dialog.py BuildWorker 18-41 1 (run)
src/gui/dialogs/build_dialog.py BuildDialog 43-476 15

Aktueller Zustand

Kompilator (kompilator.py):

  • Gut strukturiert, klare Verantwortlichkeiten
  • build() Methode mit ~80 Zeilen ist die groesste, aber noch vertretbar
  • _build_command() und _clean_build() sind sauber extrahiert
  • create_spec_file() ist eigenstaendig und koennte ausgelagert werden

BuildDialog (build_dialog.py):

  • _setup_ui() delegiert bereits an _create_basic_tab(), _create_advanced_tab(), _create_files_tab()
  • UI-Code ist durch Tabs natuerlich aufgeteilt
  • _start_build() sammelt Config und startet Worker - angemessene Komplexitaet
  • StyleSheet (50+ Zeilen) ist inline im _setup_ui()

Refactoring-Vorschlaege

1. StyleSheet extrahieren (Sicher, empfohlen)

Aufwand: Gering Risiko: Kein

Das StyleSheet in BuildDialog._setup_ui() (Zeilen 73-122) sollte in eine Klassenvariable oder separate Methode:

class BuildDialog(QDialog):
    STYLESHEET = """
        QDialog { background-color: #1e1e1e; ... }
        ...
    """

2. SpecFile-Generator extrahieren (Sicher, empfohlen)

Aufwand: Gering Risiko: Kein

Kompilator.create_spec_file() (Zeilen 334-430) in eigene Klasse SpecFileGenerator:

class SpecFileGenerator:
    """Erstellt .spec Dateien fuer PyInstaller"""

    @staticmethod
    def generate(config: BuildConfig, output_path: str = None) -> str:
        ...

3. BuildConfig-Validierung hinzufuegen (Sicher)

Aufwand: Gering Risiko: Kein

BuildConfig hat keine Validierung. Vorschlag:

@dataclass
class BuildConfig:
    ...
    def validate(self) -> List[str]:
        """Prueft ob Config gueltig ist. Gibt Liste von Fehlern zurueck."""
        errors = []
        if not os.path.exists(self.script_path):
            errors.append(f"Script nicht gefunden: {self.script_path}")
        if self.icon and not os.path.exists(self.icon):
            errors.append(f"Icon nicht gefunden: {self.icon}")
        return errors

4. Build-Output Parser extrahieren (Optional)

Aufwand: Mittel Risiko: Gering

Die Fortschritts-Erkennung in Kompilator.build() (Zeilen 204-217) ist inline:

class BuildOutputParser:
    """Parst PyInstaller-Ausgabe fuer Fortschrittsanzeige"""

    def parse_line(self, line: str) -> tuple[int, list[str]]:
        """Returns (progress_delta, warnings)"""

NICHT empfohlen

  • MainWindow aufteilen: Die MainWindow-Klasse (940 Zeilen) ist zwar gross, aber typisch fuer ein Hauptfenster einer IDE. Ein Refactoring wuerde viele Dateien betreffen und ist kein Builder-spezifisches Thema.
  • BuildDialog in mehrere Dialoge: Die Tab-Struktur ist bereits eine natuerliche Aufteilung. Separate Dialoge wuerden die UX verschlechtern.

Zusammenfassung

Vorschlag Aufwand Risiko Empfehlung
StyleSheet extrahieren Gering Kein Umsetzen
SpecFile-Generator extrahieren Gering Kein Umsetzen
BuildConfig-Validierung Gering Kein Umsetzen
Build-Output Parser Mittel Gering Optional

Fazit: Der Builder-Code ist bereits gut strukturiert. Die vorgeschlagenen Aenderungen sind inkrementelle Verbesserungen, kein grundlegendes Refactoring noetig. Die drei empfohlenen Aenderungen koennen sicher und unabhaengig voneinander umgesetzt werden.