user366312
user366312

Reputation: 16998

Code generator in C#

I've got to develop a multi-language code generator in C#. Well actually the idea is, we have several in house application frameworks for database access in various languages (Java, Python, C++). But their basic working principle is same. And we feel that a code generator will help us to reduce our development time. So I have decided to write a code generator for the ease of our development.

What are the standard basic technical steps I should follow to generate classes from database tables?

Should I use \t,\r,\n?

What are the techniques to achieve fastest speed?

I don't want to use RegEx.

Please let me know from your personal experience.

Upvotes: 1

Views: 1115

Answers (2)

David Robbins
David Robbins

Reputation: 10046

It seems that you need templating capability, so T4 as Marc Gravell suggested is quite good. SubSonic currently uses T4 to generate code. In the past, SubSonic used Asp.Net as a template system to generate code.

This may seem a bit out of left field, but John Resig has mirco-template function he wrote for Javascript that allows you to process templates that have a syntax like:

<script type="text/html" id="item_tmpl">
  <div id="<%=id%>" class="<%=(i % 2 == 1 ? " even" : "")%>">
    <div class="grid_1 alpha right">
      <img class="righted" src="<%=profile_image_url%>"/>
    </div>
    <div class="grid_6 omega contents">
      <p><b><a href="/<%=from_user%>"><%=from_user%></a>:</b> <%=text%></p>
    </div>
  </div>
</script>

You feed the template a JSON object as a data source. The nice thing with this approach is that you can quickly create a template system without having to compile and deploy - simply fire up a browser and generate your code.

Upvotes: 1

Marc Gravell
Marc Gravell

Reputation: 1063884

It really depends on what you mean; there are lots of options:

  • CodeDOM - provides an object model that can generate code for multiple languages, but can be tricky to use
  • T4 (aka TT) - the "in fashion" codegen of the moment
  • xslt - a useful fallback; not as fashionable as T4, but workable - tricky for whitespace-dependent languages like VB

In all cases, I would build a basic object-model that represents the data and work from there. I have known somebody write code-gen from a database just with SELECT, but it was ugly as sin, and painful in the extreme to maintain.

Re your questions about \t, \r, \n etc - I don't understand the question, but: whatever the target language wants! VB is the tricky one here (C# etc are easier as they don't care much about whitespace).

I've used xslt successfully, but largely because I already knew xslt, and needed to support 2.0 (T4 isn't in 2.0); otherwise T4 would have been my next stab, simply because I want to learn it ;-p

Upvotes: 4

Related Questions