On Thu, 30 May 2002 12:44:28 -0700, Loc Nguyen <[EMAIL PROTECTED]> wrote:

>board about this subject, I think it may be more trouble.  It sounds like
>the code generation is very troublesome.  Someone was asking how to insert
>logic into the generated code without it being overwritten, and he never
>got a definitive answer.  I also looked at what it took to do this and the

Well, it is and it isn't.  I simply generate initially using the XSD Schema
designer.  Then "divorce" the associated code file by a copy/rename, run my
custom insert tools on the code-file, and voila...  Our project tools
simply regen the whole damn thing everytime we change the schema.

>fact that you have to create an XSD file to generate the code from and
>then maintain it troubles me.  In my experience, whenever you have to
>maintain some metadata somewhere, it quickly gets out of sync.  It usually

I maintain metadata in the schema, using my own namespaces.  Works like a
charm.  Next we will be working on an extension/custom schema editor to
make things easier for the team.

Rule #1 about generated code.   Never treat it as truly editable, when you
want to make a change, make the change to the metadata source, then "re-
gen", and if the generated code isn't what you need, write tools to do the
touch-up's for you (simple open the schema.xsd in a generic dataset to
quickly access it's metadata).

>happens after the original developers have rolled off and new developers
>are assigned to maintain it.  Also, my requirements are a little

Maintain the metadata, and re-gen.  Personally, the maintainers are going
to do a better job of maintaining a 1000-line gen tool, than a 28,000-line
generated strongly-typed DataSet (one of ours is that large.)

>different.  I want to create business object that were mapped to my
>datastore but with different column names.  After skimming through some
>books, I didn't see how to do this with the strongly typed dataset.

I maintain the original table/view/stored proc and column names in my
schema via my own custom namespaces.  VS.NET leave's 'em alone, and my
tools then gen the necessary data mapping.  (Important to us, as we have
VASTLY different database naming conventions, and we are using a dynamic
relation/master database design to handle versioning.)

The last thing I suggest, is not using inheritence, but use interfaces
instead.  You can use some inheritence/shadows in the interfaces, but your
generator tools then become more complex.  So, I have several XSD schema
files, one being a base, next inherits from that, etc.  I have to maintain
the chain in each file via the custom namespace metadata (pretty simple),
and then my generator will shoot out the appropriate interfaces.

Code Generation by tightly-focussed tools is one of the most powerful
project enablers I have ever seen.  Heck, I have not yet performed the
metrics, but in this project I'm guessing we have about 150,000 lines of
generated code, but less than 20k lines of manually written code.  It's
allowing us the meet and exceed our published deadlines, with a tiny team
and an "un-godly" set of requirements.

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to