views:

1466

answers:

27

I've used MyGeneration, and I love it for generating code that uses Data Access Applicaiton Blocks from Microsoft for my Data Access Layer, and keeping my database concepts in sync with the domain I am modeling. Although, it took a steeper than expected learning curve one weekend to make it productive.

I'm wondering what others are doing related to code generation.

http://www.mygenerationsoftware.com

http://www.codesmithtools.com/

Others?

Back in 2000, or so, the company I worked for used a product from Veritas Software (I believe it was) to model components and generate code that integrated components (dlls). I didn't get a lot of experience with it, but it seems that code generation has been the "holy grail" for a long time. Is it practical? How are others using it?

Thanks!

+1  A: 

I have used CodeSmith. Was pretty helpful.

Geoffrey Chetwood
+1  A: 

I've done work with CSLA and used codesmith to generate my code using the CSLA templates.

codesmithtools.com

Rick Kierner
+3  A: 

I have used LLBLGen and nHibernate successfully to generate Entity and DAL layers.

redsquare
+1  A: 

If your database is your model, SubSonic has an excellent code generator that as of v2.1, no longer requires ActiveRecord (you can use the Repository Pattern instead). It's less flexible than others, but there are customizations that can be made in the stock templates.

John Sheehan
A: 

I love to use SubSonic. Open source is the way to go with code generation I think because it is very easy to modify the templates and the core as they always tend to have bugs or one or two things you want to do that is not built in.

Jim Zimmerman
A: 

I've used code generation for swizzle functions in a vector math library. I used a custom PERL script for it. None of the FLOSS generators I looked at seemed well-suited to creating swizzle functions

I generally use C++ templates, rather than code generation.

Branan
+1  A: 

I have used CodeSmith and MyGeneration, wasn't overly keen on either, felt somewhat terse to use, learning template languages etc.

SubSonic is what we sometimes use here to generate a Data Access Layer. Used in the right size projects, it is a fantastic time saving tool. clicky

nachojammers
A: 

I've primarily used LLBLGen Pro to generate code. It offers a variety of patterns to use for generation and you can supply your own patters, just like CodeSmith. The customer support has been excellent.

Essentially, I generate my business objects and DAL using LLBLGen and keep them up to date. The code templates have sections where you can add your own logic that won't be wiped out during regeneration. It's definitely worth taking a look.

Jeremiah Peschka
A: 

We custom build our code generation using linq and XML literals (VB). We haven't found a way to break the solutions into templates yet; however, those two technologies make this task so trivial, I don't think we will.

Nescio
+7  A: 

T4 is the CodeSmith killer for Microsoft!!!!

Go check it out. Microsoft doesn't want to destroy their partners so they don't advertise it, but it is a thing to be reckoned with and ITS FREE and comes installed in Visual Studio 2008.

www.olegsych.com

codeplex.com/t4toolbox

www.t4editor.net

Scott
+1  A: 

I'd consider code generation harmful as it bloats the codebase without adding new logic or insight. Ideally one should raise the level of abstraction, use data files, templates or macros etc. to avoid generating large amounts of boiler plate code. It helps you get things done quickly but can hurt maintainability in the long run.

If your chosen programming language becomes much less painful by generating it from some template language, that seems indicate you'd save even more time by doing the higher level work in another, perhaps more dynamic language. YMMV.

jjrv
I consider that a moot point if you can design the templates used to generate the code yourself. The level of abstraction is really up to you.
CitizenBane
+2  A: 

We use Codesmith and have had great success with it. I am now constantly trying to find where we can implement templates to speed up mundane processes.

jwarzech
A: 

LLBLGen Pro is an excellent tool which allows you to write a database agnostic solution. It's really quick to pick up the basic features. Advanced features aren't much more challenging. I highly recommend you check it out.

ddc0660
A: 

I worked for four years as the main developer in a web agency, as I wrote from ground-up my first two or three websites, I soon realized that it was going to be a very boring task to do it all the times. So I started writing my own web site generator engine.

My starting point was this site http://www.codegeneration.net/. I took one of their examples for a simple crud generation and extended to the level that i was generating entire sites with it.

I used xml for the definition of various parts of the website (pages, datalists, joins, tables, form management). The generated web sites were completely detached from the generator, so the generated website could also be modified by hand.

Here is their article http://www.codegeneration.net/tiki-read_article.php?articleId=19.

Anonymous
+1  A: 

I see code generation harmfull as well, but only if you use 3rd party tools like codesmith and mygeneration. I have 2 stored procedures that generate my domain objects and domain interfaces

Example

GenerateDomainInterface 'TableName'

Then I just copy and paste it into visual studio. Works pretty awesome for those tasks I hate to do.

One comment, what you described is exactly how MyGeneration works (and MyGeneration is free and open source). It is a template environment that generates code that is just added to your project. Interesting that you are generating code from a SPROC. Thanks for the answer.
+1  A: 
Hans Sjunnesson
A: 

I've done several one-off's of code generation using Castor to create Java source code based on XSD's. The latest use was to create Java classes for an Open Travel Association implementation. The OTA Schema is pretty hairy and would have been a bear to do by hand. Castor did a pretty good job given the complexity of the schema.

18Rabbit
A: 

Python.

I have used MyGeneration which uses C# to write your code templates. However, I started using Python and I found that I can write code that generates other code faster in that language than I would if written in C#. Subsequently, I have used Python to code gen C#, TSQL, and VB.

Generally, code that generates other code tends to be harder to follow by its very nature. Python's cleaner syntax helps tremendously by making it more readable and more maintainable than the equivalent in C#.

Ray Vega
Have you had any luck using SQLAlchemy + Python to generate, say, NHibernate mappings? (or other typical codegen stuff)
BryCoBat
A: 

codesmith for .net

A: 

I wrote a utility where you specify a table and it generates an Oracle trigger which records all changes to that table. Makes logging really simple.

There's another one I wrote that generates a Delphi class that models any database table you give it, but I consider it a code smell to do that, so I rarely use it.

JosephStyons
A: 

At the company we've written our own to generate most of our entity/dalc/business classes and the related stored procedures as it took only a little time and we had some special requirements. Although I'm sure we could've achieved the same thing using an existing generator, it was a fun little project to work on.

Codesmith's been recommended by many people and it does seem to be a good one. Personally all I need from a code generator is to make it easy to amend templates.

snomag
A: 

MyGeneration all the way!

pdavis
A: 

I use the hibernate tools in myEclipse to generate domain models and DAO code from my data model. It seems to work pretty well (there are some issues if you write custom methods in your DAO's, these seem to get lost on over-writes), but generally it seems to work pretty well- especially in conjunction with Spring.

Tim Howland
A: 

SubSonic is great!! The query capability is easy to grasp, and the stored procedure implementation is truly awesome. I could go on and on. It makes you productive instantly.

David Robbins
A: 

I mainly code in C# and when i need code generation I do it in XLST when the source could be simply converted to XML or a ruby script when it's more complex.

If the code generation part need frequent modifications by more than a few developers CodeSmith works pretty well (And is easier to learn than XSLT or ruby by new developers).

A: 

Outsystems' Agile Platform can be used to generate open source, well documented C# and Java applications. Because it has also several features related to deploying, managing and changing, most people end up using it not just to generate the code but actually to manage the full life-cycle of web applications.

tiago_simoes
A: 

For some time, I've used a home-grown script/template language for code generation. (I've used that languge mostly for no other reason than to find use for my little pet project)

Recently, I've created some SQL*PLUS scripts to create database access code (no Hibernate for us...)

ammoQ