Frage

Haben Sie Code-Generierungs-Tools (abgesehen von denen verwendet Proxies zu generieren und von Designern eingebaut in Visual Studio) verwenden?

Welche Rolle (n) Ihre Anwendung generieren Sie?

Sie Sie in der Regel Ihren eigenen Generator rollen? Wenn ja, welche Art von Generator schreiben Sie (asp Vorlagen, coddom etc.). Wenn nicht, welche 3rd-Party-Tools verwenden Sie?

ich zur Zeit auf ein paar verschiedenen Projekten arbeite wich alle einen eigenen Code-Generator verwenden, die alles von der Generierung der Datenbankstruktur, Geschäftseinheiten, DAL und BLL behandelt. Ich bin neugierig auf andere Völker Erfahrungen mit diesen Arten von Werkzeugen sind.

War es hilfreich?

Lösung

Ich bin in den philosophischen Lagern, die Code-Generatoren zu sein „falsch“ hält, weil sie etwas zeigen, der Teil der Sprache vorgenommen werden soll.

Aber es war ein großer Teil der Pragmatische Programmierer des Ethik-Code zu schreiben, der Code schreibt, und in der Praxis der Codegenerierung funktioniert gut, wenn der generierte Code standardmäßig ausgeblendet wird. Egal, wie philosophisch rein Sie sein wollen, wird die Sprache nie so schnell entwickeln, wie die Probleme, die Sie lösen möchten.

Der Code, der erzeugt wird, wenn Sie ein Windows Form bauen in Visual Studio in den Sinn kommt. Sie können an der generierte Code aussehen, wenn Sie wollen, aber es ist eine bessere Idee, nicht zu tun. Umzug in eine deklarativen Sprache mit WPF überlegen war, aber weil es saubere und zuverlässige deklarativen Code zu manipulieren programmatisch als zwingend notwendig, Code.

Sie haben sollen, die gleiche Sache mit LINQ to SQL-Klassen durchgeführt. Sie brauchen eine deklarative Sprache für Klassen, die nur Eigenschaften haben und kein individuelles Verhalten. Wahrscheinlich wäre es einfacher machen, um diese Entitätsklassen dynamisieren -. Ändern sich automatisch, wenn die zugrunde liegenden Datenbankschemaänderungen

Wir haben versucht, mit Codesmith .NetTiers Klassen für alle Tabellen in der Datenbank zu generieren, sondern liefen in zwei Ausgaben:

  1. .NetTiers war aufgebläht, und der Code generiert wird, war enorm. Ich denke, Code-Generierungs-Tools machen es zu einfach, Kreatur FEEP.

  2. Da das Schema aktiv entwickelt wurde und überarbeitet, wir viel, zu regenerieren hatten, und dass am Ende ist es sehr schwierig macht, alles in der Quellcodeverwaltung zu halten, weil alle Dateien regeneriert wurden und ersetzt werden. Ich war dann aber nicht sicher, ob der generierte Code sollte überhaupt in der Quellcodeverwaltung sein.

Der beste Platz für die Codegenerierung sollte im Compiler oder die Build-Phase, nicht die Entwurfsphase. Wenn Sie einen anonymen Typ oder Methode in C # verwenden, wird der Compiler on the fly zu tun Code-Generierung. Wenn Sie Code in der Entwurfsphase erzeugen, erhalten Sie ein Stück von Zeug , die jedes Mal, wenn die zugrunde liegenden Parameter ändern regeneriert werden muss.

Andere Tipps

Ja, aber wir bezeichnen sie als Praktikanten.

Nicht, dass wir in der .net / Web-Domain arbeiten, aber hausgemachte Code Generationen Tools von verschiedenen Home gestalteten Sprachen sind ein wichtiger Bestandteil unserer Entwicklungswerkzeugkette. Wir haben zwei große solche Werkzeuge (mit Grammatiken und Parsern und formalen Definitionen), und eine Vielzahl von kleiner man auf Makros wie m4 und Perl gebaut. Sie alle erzeugen Ebene C am Ende, die nativ kompiliert wird.

Domänenspezifische Sprachen sind eines der wichtigsten Werkzeuge für die Produktivität der Programmierer für jede große Software-Bemühung in meiner Erfahrung. Wenn Sie Dinge wie Compiler, Simulatoren bauen oder andere sehr komplizierte Software mit vielen wiederkehrenden Mustern, die keine Unterstützung überhaupt in den Grundsprachen haben (die in der Regel tragbare C bedeutet und manchmal C ++), Code-Tools zu erzeugen ist der Weg zu gehen. Ich sehe domänenspezifische Sprachen als nächsten Schritt in Verallgemeinerung: Sie erste gemeinsame Berechnungen in Funktionen auszubrechen (oder Subroutinen historisch sein), können Sie dann ausbricht gemeinsame Funktionen in Vorlagen oder Generika, wenn eine solche Anlage zur Verfügung steht, und dann brechen Sie heraus sogar noch mehr Gemeinsamkeit und Wiederholen Code in eine ausgewachsene individuellen Sprache.

Es geht um das Volumen des Codes zu reduzieren Sie tatsächlich schreiben, und das Entfernen jeglicher Form von langweilige Wiederholung und nicht-wertschöpf Code aus dem Programmiervorgang. Sobald Muster wiederholen, eine domänenspezifische Sprache anwenden!

Ich begann meine eigenen Generatoren (Datenzugriff, sprocs usw.) rollen zurück, wenn ich klassische asp Arbeiten verrichtet hat (um 2001). Ich bewegte sich langsam auf Codesmith, da es viel einfacher war, zu beschäftigen. Ich war immer noch in erster Linie nur alle Datenzugriffsschicht-Typ Material zu erzeugen (einschließlich sprocs) für meine .NET-Code.

Vor ein paar Jahren, habe ich den Sprung von Makrocode-Generierung (das heißt Codesmith) zu Micro Code-Generierung.

Der Unterschied ist, dass mit Codesmith ich große Schwaden von Code für meine App wurde Erzeugung aller generisch, und auf einmal. Dies wurde für die Kanten Fälle problematisch und Regenerieren, wenn die Quelle für die (d Tabellenstruktur) Vorlage zu verändern. Ich lief auch Fälle, in denen ein hohes Inventar war Code enthalten, dass ich nicht mit, wurde aber von meiner Vorlage erzeugt. Haben alle arbeiten diese Methoden? Vielleicht, vielleicht nicht. Gehen in die und den generierten Code Reinigung würde eine riesige Menge an Arbeit waren (das heißt nach mehr als einem Jahr auf der gleichen Code-Basis).

Micro Code-Generierung im Gegensatz dazu ermöglicht es mir genau die Klassen zu erzeugen, ich brauche, in genau der richtigen Szenario ich will. Das primäre Werkzeug, das ich verwende, um dies zu tun ist, ReSharper. Die Art, wie ich dies tue, ist von meinen Unit-Tests zu schreiben, bevor mein Produktionscode zu schreiben. In diesem Szenario verwendet ReSharper meinen Unit Test als Vorlage, um das Gerüst für die Produktion Code automatisch zu generieren. Dann ist es nur eine Frage in den Lücken zu füllen.

Für Data Access, ich bin nicht mehr zu erzeugen nichts. Ich habe festgestellt, dass eine gute O / R M alles ersetzt habe ich in meiner Datenzugriffsschicht setzen (das heißt NHibernate). Da werde ich nie wieder eine Datenzugriffsschicht in meinem Leben schreiben oder erzeugen (ich weigere ich zu).

Plus, ich die Vorteile bekommen eine große Unit-Test-Suite, die unter anderem

Da Fog Creek Software in-house Sprache, Wasabi, hat Kompilierung-Code-Generatoren eingebaut, können wir sie verwenden, um automatisch das Fleisch unserer Entitätsklassen zu erstellen, die auf Datenbanktabellen abzubilden. Anstatt also eine Klasse mit einem Dutzend verschiedenen Eigenschaften und Methoden schreiben, können wir nur schreiben:

<ActiveRecord("Kiwi")> _
Class CKiwi
End Class

und CKiwi hat Last (ix Wie Int32), commit () und Felder / Eigenschaften für jede Spalte in dem zugrunde liegenden Schema für die Kiwi-Tabelle definiert. Es hält uns davon ab, die großen O / R-M-Bibliotheken haben, aber noch können wir schnell auf einen Tisch zu unseren Produkten hinzuzufügen.

Code-Generierung im Geist der Compiler kann groß sein. Code-Generierung in den Geist der „Zauberer“ hat einheitlich erwies sich als eine schlechte Idee zu sein.

Wir verwendeten Codesmith nutzen, um unsere NHibernate HBMs zu generieren, unsere Einheiten, und ein paar andere Dinge. Nach einer Weile haben wir diese Strömung krank, so dass wir es ditched.

Der T4-Generator ist kostenlos und lohnt sich in zur Erzeugung suchen.

Wir haben immer noch das Schloss Codegenerator für Einschienen Link Generation verwenden.

  1. Wir verwenden Code-Generatoren für Ausnahmen
  2. Erstellen von DAO für CRUD-Operationen
  3. verwenden JAXB Code genereate
  4. Verwenden Sie XDoclet genereate lokale EJB / home-Schnittstellen
  5. Mit Velocity-Templates zu generieren Dokumentation für Geschäftsmodelle
  6. Verwenden Sie Apache Axis WSDL Stubs zu generieren

Ich traf ActiveWriter ein paar Monaten und es hat mir sehr geholfen, was ich mag die Flexibilität dieses Ansatzes ist, erzeugt es partielle Klassen, die die Datenzugriffsprobleme behandeln und es lässt mich das Geschäft Teil der Klassen codieren. Ich fühle mich sehr zufrieden Ursache erspart mir eine Menge Arbeit, es ist sehr schön, das Schema zu ändern, neu zu generieren und weitergehen.

Ich eröffne mein eigenes Werkzeug für einige Aufgaben. Es macht Spaß zu tun und selbst spart Zeit auf lange Sicht. Für sehr langweilig Aufgaben, es spart auch Ihre geistige Gesundheit.

Selbst gebrautes Code-Generatoren große Arbeit für den Aufbau Unittest Fälle von End-User-Tabellen, die Beispiele dafür, wie es enthalten sollte Arbeit.

Siehe Tooling zu Testfällen beim Aufbau ein Beispiel dafür.

Wir verwenden LLBLGen unsere Datenzugriffsschicht herzustellen. Sie zeigen den Generator in der Datenbank Ihre verwenden, wählen Sie die Tabellen, die Sie verwenden möchten, und es spuckt die benötigten Klassen. Es ist alles sehr schnell und einfach.

Wir haben einen hauseigenes gebaut Code-Generator, die Pflege von Datenbankzugriff erfolgt. Man schreibt gespeicherte Prozeduren und erhält entsprechendes Verfahren in einer Gateway-Klasse abstrahiert.

Wir haben auch Web-Service, um richtig Schnittstelle mit Flash-Erzeugung - d. H Umgang mit Ausnahme in einer vernünftigen Art und Weise

Schließlich haben wir eine Ausnahme Generator, der die Plackerei der Ausnahme Best Practices (Tonnen Konstrukteure, etc ...)

wegnimmt

Bei einem frühen Arbeitgeber, wir hatten eine home-grown VB.NET-Anwendung, die eine XML-Schema-Definition-Datei (XSD) in eine statischen C ++ Bibliothek wenden würde. Das machte es viel einfacher, mit C ++ Datentypen zu arbeiten (Bool, std :: string, etc.), und alle interessanten XML-Code wurde innerhalb dieser generierten Klassen versteckt.

Wir beginnen gerade Grails hier im Büro. Früher mussten wir eine Reihe von in-house JSF / Hibernate CRUD Generation Skripte.

... Grails gewinnen. Die Code-Generierung von Grails ist sehr schön und können Ihnen eine CRUD App bekommt in etwa 15 Minuten gehen, ohne tatsächlich den Code in den Code-Dateien zu setzen!

Natürlich kann es den eigentlichen Code in die Code-Dateien generieren, wenn Sie es ändern möchten. Die meiste Zeit, für regelmäßige CRUD, Sie können mit nur Veränderung der Ansichten wegzukommen.

Ich habe ein verwendet serializable Datenobjekte zu erzeugen, die auf verschiedenen Plattformen (Windows, Linux, Solaris, Mac, bsd, usw.) reformiert werden könnte. Es war eine Inhouse-Lösung.

schrieb ich ein schönes Werkzeug, in dem die Experten im Datenformat ich für einen Parser geschrieben hatte, konnte ihre eigenen Proben durch ein Web-Formular einreichen, am Ausgang suchen, und sagen Sie mir, ob es richtig ist.

Von diesem, ein JUnit-Test würde generiert werden. Sehr schön.

Abgesehen davon, dass nicht eine einzige Person die Mühe gemacht, es zu benutzen, und ich sammelte keine Testfälle whatseover.

Wie einige andere hier haben wir auch unseren eigenen Code-Generator (Inon Datamanager / Viewmanager) für den Datenzugriff, HTML-Formular Handhabung und bestimmte Geschäftslogik-Operationen erstellt. Ein Schlüssel, um diese Arbeit gut zu haben, ist es so zu gestalten, dass Sie nie an dem generierten Code berühren oder zu suchen.

Auf diese Weise ist es nicht fast ein Teil der Sprache worden - die Sprache (Java in unserem Fall) erweitert, um eine Domain Modellspezifikation und ein Ansichtsmodell aufzunehmen, und dann füllen Sie einfach in kundenspezifische Geschäftslogik mit echtem Java-Code.

Das gibt uns die richtigen Werkzeuge mit Analysten und Business-Anwender, zu kommunizieren, während immer noch die Macht der Java mit den Details des zugrunde liegenden Verhaltens einzurichten.

Bei Interesse an LLBLGen, die ausgezeichnet ist, können Sie auch Unterschall bewerten. Vielleicht sogar sehen, was Rob Conery über jede Überlappung oder Interaktion zwischen Unter- und t4 zu sagen hat.

Ich schrieb und verwenden Sie ein Xslt basierten Code-Generierungs-Tool. http://perfectstorm.codeplex.com/

Dieses verwendet eine einzige Wurzel xml Modell dal, Procs, Tabellen zu erzeugen.

Ich habe einen benutzerdefinierten Code-Generierung Rahmen geschaffen, Proxy-Klassen für Web-Service in mehreren Sprachen wie Java Script, Action Script, Java, C # und Objective C erzeugt, verwende ich keine Vorlagen oder Werkzeuge einfach nur C # Code, den Code generiert mit einige Hilfsklassen können Codegenerierung wirklich viel Zeit sparen, aber ich denke, der generierte Code sollte so einfach wie möglich sein und nicht überstrapaziert werden soll.

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