Quels sont les avantages et les inconvénients de la génération de code?
Il y a probablement différents types de génération de code. Dans RoR par exemple, les Rails peuvent créer des squelettes pour les modèles, contrôleurs, etc. Mais le développeur n'a pas à remplir ces squelettes.
Maintenant, à certains moments, il y a des projets où de nombreux artefacts dans leur intégralité générée en fonction d'un ensemble de définitions ou de modèles.
Je suis surtout intéressé à connaître les avantages et les inconvénients de ce dernier type de génération de code.
Cela ressemble à une copie de stackoverflow.com/questions/113286/...
OriginalL'auteur Behrang | 2010-12-23
Vous devez vous connecter pour publier un commentaire.
Le principal avantage est qu'il fait le travail pour vous, son reproductible, et que le code sera plus susceptibles de travailler (qui dépend bien sûr si la personne qui a écrit le générateur savaient ce qu'ils faisaient). Il peut enlever beaucoup de temps à faire des tâches de codage. Par exemple, est-il vraiment utile de votre temps pour écrire des objets qui ne sont rien de plus que des conteneurs de données à partir de la base de données, ou est-il préférable d'avoir un programme crée automatiquement ces pour vous?
Le gros inconvénient est qu'il vous oblige à écrire le code qui est compatible avec le code généré. La plupart du temps ce n'est pas un problème, mais il peut être un problème réel, quand quelqu'un vient à vous et dit "Hé, pouvez-nous faire X?" et que les conflits avec le code généré. Si le générateur est bon, il vous permettra de modifier les fonctionnalités, mais presque toujours par une augmentation de la complexité du code généré etc. Cette complexité a un prix. C'est plus difficile à comprendre, et il peut être moins efficace que le code que vous écrivez vous-même. Bien sûr, cela varie selon la situation.
En ligne avec @SK-logique commentaire, AtomWeaver (www.atomweaver.com) est un service gratuit (freemium) générateur de code qui génère un code en quatre étapes, et combine discrets mini-générateurs (pensez à Lego) dans un grand, facile à gérer générateur.
Un problème que j'ai personnellement expérimenté avec la coutume des générateurs de code développé en interne, c'est qu'ils ont un supplément de courbe d'apprentissage. Un autre est qu'il augmente le temps d'exécution de la dite
clean compile
. De Plus, le code généré, à des degrés divers, n'est pas conforme au style de codage de l'équipe (par exemple, indentings, etc.) Je pense que la conclusion est que la plupart du temps, c'est une question de préférence personnelle... 🙂J'étais plus intéressé par des faits plutôt que sur des observations personnelles. Dire une recherche universitaire sur les avantages et les inconvénients de la génération de code. Mais de toute façon, je vais accepter cette réponse est qu'il est le plus voté.
pourquoi voulez-vous regarder dans un code généré? Style de codage n'est pas grave du tout. Dans la pratique, DSL compilateur qui génère un code, en plus de tout le code mis en œuvre dans ce DSL, est beaucoup plus compact que l'équivalent d'un code dans un langage de programmation. Même pour une courbe d'apprentissage: compréhension d'un DSL est un moyen beaucoup plus facile que de se saisir d'un tas de spagetti code. Essayez d'appliquer cette mise en scène truc, et vous allez voir comment beaucoup plus simple qu'il est.
OriginalL'auteur kemiller2002
Le principal problème avec ce style de programmation est qu'il contamine un point de vue de votre projet. Il ne vous permet plus à la pratique de la SEC. Il est utile d'avoir une séparation nette entre ce qui est généré automatiquement, et ce qui est écrit par un homme. La plupart des systèmes, en particulier à base de fichiers, ne pas soutenir une telle séparation. Dans les systèmes qui ont de bonnes capacités d'introspection (par exemple, smalltalk images), la construction d'une dynamique de la structure de l'objet par la marche de la définition de modèle, est préférable.
Dans l'illusion basée sur la programmation (tel qu'il est pratiqué dans les grandes entreprises et les organismes gouvernementaux), il est très utile car il permet la génération de très impressionnant, des piles de documents et de spectacle impressionnant de la mise en œuvre de la performance mesurée dans les lignes de code par l'homme du mois. Il votre la qualité la plus importante est bien sûr le moment de votre disparition de la loi.
Dépend de la qualité de la séparation. Sonne comme LLVM n'ok. J'ai tendance à trouver plus naïf des implémentations beaucoup plus à l'état sauvage.
Alors, après tout, ce n'est pas un problème de génération de code lui-même, mais c'est juste une technique de détournement à grande échelle. Eh bien, ce est un problème commun à toutes les techniques de programmation qui ait jamais existé.
L'OP demande des inconvénients. C'est l'un. C'est un problème inhérent à la source-à-source de génération de code. Vous pouvez faire beaucoup pour s'assurer qu'il n'est pas un grand problème, mais dans la plupart des contextes, il existe de meilleures solutions. Maintenir haut le niveau d'informations disponibles permet une meilleure prise de décisions.
OriginalL'auteur Stephan Eggermont
Je pense que la chose la plus importante à garder à l'esprit est POURQUOI vous souhaitez générer le code source. Est-il, par exemple, parce que vous êtes plus à l'aise avec UML que n'importe quel langage de programmation et par conséquent, ils veulent générer des classes orientées objet à partir de ce modèle graphique?
Est-ce parce que vous avez exprimé une définition de schéma dans n'importe quelle langue (SQL DDL par exemple: jOOQ, XSD par exemple JAXB de génération de code) et que vous souhaitez générer un modèle de ce que?
L'avantage de la génération de code est toujours le fait que vous exprimer quelque chose de seulement une fois (comme dans SEC, comme Stephan a déclaré). C'est une très bonne pratique qui fait en profondeur dans l'extreme programming (entre autres). Lorsque vous gardez les choses au SEC, vous ne serez pas courir le risque que le modèle se distingue de ses colle le code. D'autre part, vous pouvez souffler votre colle le code, car il va correspondre exactement à son modèle sous-jacent. En général, vous avez une classe/type/objet par RDMBS table, ou par un élément XML.
Si, toutefois, vous utilisez la génération de code parce que vous êtes plus à l'aise avec un langage de modélisation (comme dans MDA, ou model-driven architecture), vous pourriez courir le risque que votre code généré n'est pas assez bonne (manque de détails) ou trop compliqué (manque de simplicité) parce que - par exemple - UML n'est pas adapté pour la résolution de problèmes en détail.
Dans tous les cas: la génération de code peut être très utile si le code généré peut être utilisé EST-à - et n'a pas besoin de personnalisation. Dès que vous commencez à personnaliser le code généré, il peut devenir un entretien cauchemar.
OriginalL'auteur Lukas Eder