Was Code würden Sie für die Verwendung eines Code-Generator wie Codesmith in Betracht ziehen?

StackOverflow https://stackoverflow.com/questions/4720186

  •  12-10-2019
  •  | 
  •  

Frage

Ich benutze Codesmith für die PLINQO Vorlagen, meine DAL zu bauen aus meiner DB-Objekte; es funktioniert super!

Ich glaube, das ist die primäre Verwendung von Code-Generator-Anwendungen, aber ich bin neugierig ... welche anderer Code würden Sie für einen Code-Generator in Betracht ziehen? Haben Sie Codesmith-Vorlagen, die Sie häufig verwenden (wenn ja, was tut sie)?

War es hilfreich?

Lösung

Ich habe Codesmith nicht verwendet, aber ich habe ein gutes Stück von Code-Generierung erfolgt. Vornemlich schrieb ich die meisten ein Configuration Management (CM) System für ein WiMAX-System, in dem der Code CM wurde für 3 verschiedene Plattformen generiert. Der einzige Unterschied war das CM-Modell für jede Plattform.

Das Modell wurde in einer benutzerdefinierten Domain Specific Language (DSL), dass wir einen Parser für gebaut haben. Die Sprache war ein Basiscontainer / Element Stil, wo Container Nest konnte, und eine Kennung haben, und Elemente waren von vordefinierten Typen. Dokumentation war ein Attribut von Elementen und Behältern. Sie könnten Lua Schnipsel zu dem Element und Containerdefinitionen hinzufügen semantische Validierung zu tun (zum Beispiel ist der Wert in der richtigen Bereich, wenn es sich um eine IP-Adresse ist es in einem CIDR Bereich ist an anderer Stelle definiert, usw.).

Der Parser erzeugt einen Syntaxbaum, dass wir dann auf Vorlagen geschoben. Die Template-Sprache war eine partielle C-Implementierung von String . Wir haben es zu generieren:

  • Ein Modell spezifischer C-API, dass Anwendungen in nennen könnten Konfigurationswerte zu erhalten,
  • Der gesammelte Lua-Code für die Validierung des Modells und den nützlichen Fehlermeldungen,
  • Zwei „Backends“ für die API, die Werte im Speicher (für temporäre Manipulation eines Modells), und in einem Datenbanksystem verwalten würde (für den Austausch zwischen Prozessen)
  • Konfigurationsdatei-Parser und Schriftsteller,
  • HTML-Dokumentation und
  • Command Line Interface (CLI) Implementierung für interaktive Anzeigen und Ändern einer Konfiguration.

Im Nachhinein sollte ich einfach Lua direkt als DSL verwendet haben. Es wäre eine ausführlichere, aber den Parser schon da und viele Lua Templating Möglichkeiten zur Verfügung, um mir eine Menge Entwicklungsarbeit gerettet hätte müssen.

Für Dinge, die eine repetivie Struktur haben und gut definierte Regeln darüber, was diese Dinge tun müssen, um, Code-Generierung kann eine wunderbare Sache sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top