5. Houston, we’ve got a problem !
Our business domain contains 500+ entities.
Each entity needs CRUD.
@dmytromindra
6. Houston, we’ve got a problem !
And you have lots of time.
The whole 4 months.
For your big team of 4 developers that should
not be a problem !
@dmytromindra
7. Houston, we’ve got a problem !
Oh, and we’re not sure which parts will stay
generic and which won’t
@dmytromindra
8. Houston, we’ve got a problem !
Be agile, don’t wait for the analysts to finish their
job, because we don’t have that kind of time.
Just change your code when the Requirements are
finished.
@dmytromindra
9. Houston, we’ve got a problem !
For each domain entity we should have
• Stored Procedures
• Repository
• Service
• Controller
• Views
• etc
That’s about 1000 lines of code per entity.
@dmytromindra
10. Houston, we’ve got a problem !
But we have 500+ entities
500*1000 = 500000 lines of code.
Who wants to type this in ?
@dmytromindra
11. Houston, we’ve got a problem !
• And when the changes arrive someone should
make corrections to 500*1000 lines of code.
@dmytromindra
12. What are the solutions ?
• Hand-code everything (and every change)
– Hire a lot of monkeys coders
• Design everything generically, correctly the first time
– Mission impossible
• Use only code generation
– And spend your life changing generator to match all
possible requirements
• Use combination of tools including code generation.
– This seems reasonable
@dmytromindra
13. Boilerplate
• Interestingly, the term (boilerplate) arose
from the newspaper business. Columns
and other pieces that were syndicated
were sent out to subscribing newspapers
in the form of a mat (i.e. a matrix). Once
received, boiling lead was poured into this
mat to create the plate used to print the
piece, hence the name boilerplate. As the
article printed on a boilerplate could not
be altered, the term came to be used by
attorneys to refer to the portions of a
contract which did not change through
repeated uses in different applications,
and finally to language in general which
did not change in any document that was
used repeatedly for different occasions.
@dmytromindra
23. PROS
• Code uniformity
• Easy to debug
• Easy to introduce huge changes
• No more boilerplate code
@dmytromindra
24. CONS
• Someone should maintain the generator
• Generator has learning curve
• Generator usually has limitations
@dmytromindra
25. Applications
• Database Access
• Generate Test Data
• Generate Integration Tests
• User Interface
• Documentation
• Unit tests
• File Formats
• Web services
• Business logic
• DLL Wrappers
• Firewall configuration
• Website configuration
• Looking for localizable strings
@dmytromindra
26. Code Generation is Fun ?
• CG makes boring job for you
• Writing generator is fun
• Once written generator works for you
• You can experiment with different implementations by
modifying generator and regeneration the code.
• While writing the generator you get deeper into the
technology instead of doing dull job.
@dmytromindra
29. Rules
1. Give the proper respect to hand-coding
2. Handwrite the code first
3. Control the source code
4. Make a considered decision about the
implementation language
5. Integrate the generator into the development
process
@dmytromindra
30. Rules
6. Include warnings
7. Make it friendly
8. Include documentation
9. Keep in mind that generation is a cultural
issue
10. Maintain the generator
@dmytromindra
31. A note about DSL
A domain-specific language (DSL) is a
programming language or specification
language dedicated to a particular problem
domain
@dmytromindra
35. Model Driven Architecture
• Code generation has a dramatic impact on
development time and engineering productivity.
• The application is amenable to change on a large scale.
• The business rules are abstracted into files that are free
of language or framework details that would hinder
portability.
• The code for the application is of consistently high
quality across the code base.
@dmytromindra
36. Benefits of MDA
• Quality
• Consistency
• A single point of knowledge
• More design time
• Design decisions that stand out
@dmytromindra
40. Consider this:
• Code generation has a large initial schedule
overhead;
• Code generators are ideal for well-known large-
scale problems;
• Code generation is powerful when used
appropriately;
• Always keep in mind code generation limitations!
@dmytromindra
41. Code Generation Skills
• Text Templates
• Regular Expressions
• XML Parsing
• Reflection
@dmytromindra
44. StringBuilder
• Advantages
– Almost all .net developers should feel comfortable using
the StringBuilder class so it requires no additional
languages / tools to learn.
– Even with the disadvantages, the StringBuilder can be an
excellent choice if you need to generate code quickly.
Especially if you don’t need to maintain the “template”
long term.
• Disadvantages
– Unable to truly see the “template” within the control logic.
– Requires a recompile if the “template” should be changed.
@dmytromindra
45. Code Snippets
• Advantages
– Simple Xml based template with numerous
samples provided within Visual Studio.
– Several open source code snippet libraries
available.
• Disadvantages
– Limited snippet functions and at the present time
developers are unable to author additional
snippet functions!
@dmytromindra
46. XSLT
• Advantages
– Xml based template.
– Simple code generation technique for those
developers comfortable with XSLT
transformations.
• Disadvantages
– While Xml is a relatively simple technology, XSLT
has been known to bring grown men to tears!
– XSLT can be difficult to debug.
@dmytromindra
47. Reflection Emit
It is rocket science mixed with the black arts.
• Full representation of physical structure
• Allows building modules and assemblies at
runtime
– Transient code only used at runtime
– Persistent code for reuse
• Create classes, types and emit IL
• Used by .NET compilers to build .NET apps
• Can be as fast as normal code
@dmytromindra
48. EnvDTE
• EnvDTE is an assembly-wrapped COM library
containing the objects and members for Visual
Studio core automation.
• Using EnvDTE you can develop your own add-
ins for Visual Studio that can generate code.
@dmytromindra
49. CodeDom
• Advantages
– Allows a single “template” to generate code within several
target languages, such as VB and C#.
– Additional language providers can be written to support
other languages.
– Proven technology, used by Microsoft for code generation
in all versions of Visual Studio since .net was released.
• Disadvantages
– Unable to truly see the “template” within the control logic.
– Requires a recompile if the “template” should be changed.
– Very few developers have experience using the CodeDom
even though it has been with us since the .net framework
1.0.
@dmytromindra
52. T4 Tools
• Tangible T4 Editor for Visual Studio 2010
RTM adds IntelliSense and Syntax Coloring to
T4 Text Templates.
• T4 Toolbox
@dmytromindra
53. T4 Pros and Cons
• Advantages
– Ability to embed C# control logic within the template.
– Syntax that will be somewhat familiar to classic ASP developers..
– Preferred code generation technique for Entity Framework 4.0
and the Visual Studio 2010 modeling tools., which means lots of
samples on MSDN, etc.
– Templates can be precompiled.
• Disadvantages
– While third parties have written language support for Visual
Studio no built in support for editing T4 templates exists in
Visual Studio today.
– Relatively new technology, therefore not many developers have
experience with T4 templates.
@dmytromindra
54. ReSharper 6.0
Code Generation
Create from Usage
Generate Type Members
Generate Type Constructor
Generate Properties
Generate Delegating Members
Generate Formatting Members
Generate Equality Members
Implement/Override Methods
@dmytromindra
63. Case 4: Model Driven DAL
Hand written services
Generated Repositories
XML Generated Entities
Model
Partially generated DB
@dmytromindra
64. It’s an Engineering, Baby !
Conclusion:
• Not a silver bullet but another good
tool;
• Makes life easier when applied
properly;
• Writing generator is much more fun
than writing boilerplate code;
• Generated code is easier to debug;
• You can make huge changes in
regenerated code easily;
@dmytromindra
65. Do try this !
• Code generation can make you flexible and
responsive. Do try this at home. (Or at work)
@dmytromindra