Archive for the 'Domain-Driven Design' Category

Application Generation using AjGenesis

These days, I wrote new examples for my open source project AjGenesis

http://www.ajlopez.com/ajgenesis
http://www.codeplex.com/ajgenesis

Using AjGenesis, we can produce, starting from our own model, applications for ASP.NET 1.x/2.x, JSP, using SQL Server in .NET, with ADO.NET or NHibernate, or MySql with Java and Hibernate. The sample generated applications use a layered architecture (but remember: these are sample applications, you can write and use your own models, tasks, and templates). Other option: it can generate layers following ideas from Eric Evans’ Domain-Driven Design.

I’m still writing those examples, but now, you can download the current version from

AjGenesisExamples3New.zip

The examples require the use of AjGenesis last release:

AjGenesis Version 0.4.3

but you can try the current version under development:

AjGenesis Version 0.5

In this post, I want to comment how AjGenesis works and some of its inner structure, using one of those examples. Although I will concentrate in producing VB.NET code, you’ll find that the example is able to produce C Sharp and Java/JSP solutions, as well.

First, let’s review first some points about the project. The big picture:

AjGenesis Version 0.4.3 is written using VB.NET V1.x, but version 0.5 is the current version under development, and it was rebuilt using .NET 2.0. The project is open source, and has a BSD-like license, that allows to use it in any project what you want: you only need to comply with the license (in short, put some reference to the original project). It is possible to be used like a library, invoked from your own project, or it is possible to be invoked from command line, or even it can be used from using NAnt (this tool gives you a better organization of the code generation tasks).

There are several samples in the page of the project (inside the project zip source file and in additional files). They generate code from a model, invoking tasks and processing templates. The samples generate code PHP, Java, JSP, VB.NET, C#, ASP.NET, and even scripts of procedure and data base stored. I want to emphasize two points:

- The model to use is totally definible by you. It’s a free model, it’s not a fixed one. You can model what you want to model.

- The tasks and templates to apply are totally programmable and controlable. You are in charge. 

That’s make a difference from other generators. We can create our own model, and its own templates and tasks, to generate any text artifacts. Other systems start from the data base, and they only generate a group of predefined text files (as POJOs, plain old java objects, or DAOs, Data Objects Access). But with AjGenesis you can generate any text file you need.

In order to better understandind the free model concept, read a previous post:

Generating Code Hello World with AjGenesis

In that post, the initial steps are described, using a free model, totally oriented to the domain to represent: a typical Hello World application, implemented in different technologies.

Creating an application

Let’s do something more complete in this post. Suppose we need to create a simple solution simple, with two tables, in a MS SQL Server databse, source code in VB.NET 2,0, web interface, layer of services, layer of data, business components and business entities a la Microsoft. We want to generate the solution, the projects, scripts for database creation, and stored procedures. This example is included in the examples AjGenesisExamples3New.zip. First step: to write the model.

The project

In a directory of projects of the examples that accompany this article, there is a Projects/AjFirstExample directory.

In that directory it is the Project.xml file that contains the model.

<Project>
    <Name>AjFirstExample</Name>
    <Description>First Example
    using AjGenesis</Description>
    <Prefix>AjFE</Prefix>
    <Domain>com.ajlopez</Domain>
    <CompanyName>ajlopez</CompanyName>
    <Model>
        <Entities>
            <Entity
            Source="Entities/Customer.xml"/>
            <Entity
            Source="Entities/Supplier.xml"/>
        </Entities>
    </Model>
</Project>

Remember: the model is free. Here we define the templates that we are going to use. The model contains two simple entities: customers and suppliers.

The entities

The XML file is not terribly long: AjGenesis allows that any node of the model is specified apart in a file. This is a criterion that I have used to define how the model is written: the resulting XML does not have to hurt at sight, must be understandable and abarcable in a reading.

In the Project.xml, that feature is used in the case of the entities, with the Source attribute. Let us examine an entity, written in Entities/Customer.xml:

<Entity>
    <Name>Customer</Name>
    <Description>Customer Entity</Description>
    <SetName>Customers</SetName>
    <Descriptor>Customer</Descriptor>
    <SetDescriptor>Customers</SetDescriptor>
    <SqlTable>customers</SqlTable> 

    <Properties> 

        <Property>
            <Name>Id</Name>
            <Type>Id</Type>
        </Property> 

        <Property>
            <Name>Name</Name>
            <Type>Text</Type>
            <SqlType>varchar(200)</SqlType>
        </Property> 

        <Property>
            <Name>Address</Name>
            <Type>Text</Type>
            <SqlType>text</SqlType>
        </Property> 

        <Property>
            <Name>Notes</Name>
            <Type>Text</Type>
            <SqlType>text</SqlType>
        </Property> 

    </Properties>
</Entity> 

There are attributes of the entities, like its name and description, in plural and singular. This data serve to name them in the resulting pages, or within the code. The properties are the fields to maintain in each entity..

Aside from the entities, in another directory, Technologies, specifies the dependent model of the technology, like VbNet2:

The templates

The templates to use are at the Templates/VbNet2 directory:

They are the templates for generation of code VB.Net 2.0. Also we will find groups for C# 1/2, Vb.NET 1,2, Java (although I’m thinking to drop templates for .NET 1.x: I don’t see any reason to maintain these). There are templates to use Nhibernate, Hibernate, JSP, MySql, and concepts of Domain-Driven Design, too. Let’s review a template as an example, the one that generates the organization in Visual BASIC, EntityVb.tpl:

<# 

message "Generating Entity ${Entity.Name}" 

include    "Templates/VbNet2/VbFunctions.tpl" 

include    "Templates/VbNet2/Prologue.tpl"
#> 

'
'    Project ${Project.Name}
'        ${Project.Description}
'    Entity    ${Entity.Name}
'        ${Entity.Description}
'    
'

Public Class ${Entity.Name} 

'    Private Fields

<#
for each Property in Entity.Properties
    message    "Procesando Campo ${Property.Name}"
#>
    Private m${Property.Name} as ${VbType(Property)}
<#
end for
#> 

'    Default Constructor

    Public Sub New()
    End Sub 

'    Public Properties

<#
for each Property in Entity.Properties
    message    "Procesando Propiedad ${Property.Name}"
#>
    Public Property ${Property.Name}() as ${VbType(Property)}
        Get
            Return m${Property.Name}
        End Get
        Set(ByVal Value As ${VbType(Property)})
            m${Property.Name} = Value
        End Set
    End Property
<#
end for
#> 

End Class 

Like before, control structures are used. XML is the serialized format of the model. During the code generation process, the model is loaded in memory, ready to be accesible via dynamic variables.

The steps

We have more files to generate: from the pages ASPX, and their associated code, the projects of facade on watch, organizations, access to data, the file of solution, and more. In order to automate this generation, the example has several files of tasks, in the Tasks directory, where the steps are described to execute. There are two great tasks: the steps to execute independently of the chosen technology, like completing the model, reviewing it, and the employees of the technology, like generating such file JSP or ASPX, depending on if we want Java or .NET.

The task of completing the model is in charge of Tasks\BuildProject.ajg, that begins with:

'
' Build Project
'    Complete the Project Data
'    Project must be loaded in global variable Project
'

PrintLine "Completing Project ${Project.Name}" 

include "Templates/EntityFunctions.tpl"
include "Templates/Utilities.tpl" 

if not Project.Title then
    Project.Title = Project.Name
end if 

if not Project.Version then
    Project.Version = "1.0.*"
end if 

if not Project.SystemName then
    Project.SystemName = Project.Name
end if 

The template includes some auxiliary functions, and then, it begins to complete the model that resides in the Project variable. For example: if the project lacks Project.Title the program set Project.Name as Project.Title. The program continues:

for each Entity in Project.Model.Entities
    PrintLine "Entity " + Entity.Name 

    for each Property in Entity.Properties
        PrintLine "Property " & Property.Name
        if Property.Type="Id" and not Property.SqlType then
            Property.SqlType="int"
        end if
        if Property.SqlType and not Property.SqlColumn then
            Property.SqlColumn = Property.Name
        end if
        if Property.Type="Id" and not Entity.IdProperty then
            Entity.IdProperty = Property
        end if
        if Property.Reference then
...

After that process, the technology tasks are executed. The example use Tasks\BuildVbNet2.ajg, here a fragment:

<# 

include "Templates/Utilities.tpl"
include "Templates/VbNet2/UtilitiesVb.tpl" 

message "Creating Directories..." 

FileManager.CreateDirectory(Project.BuildDir)
FileManager.CreateDirectory("${Project.BuildDir}/Sql")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.Entities")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.Entities/My Project")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.Data")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.Data/My Project")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.Services")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.Services/My Project")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.Business")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.Business/My Project")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.WebClient")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.WebClient/App_Themes")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.WebClient/App_Themes/Default")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.WebClient/Admin")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.WebClient/Controls")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.WebClient/MasterPages")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.WebServices")
FileManager.CreateDirectory("${Project.BuildDir}/Src/${Project.Name}.RemoteServices") 

message "Defining Solution and Projects..." 

...

In this fragment, the directories necessary are created to lodge the solution. The name of the directory is extracted of the model from Project.BuildDir. Note that ${ } in a string is used to expand the inside expression into the string value.

Technology Model

Under the directory Project\AjFirstExample\Technologies they are some models that describes the technology parameters to use:

 

Let’s examine VbNet2.xml:

<Technology>
    <Programming>
        <Dialect>VbNet2</Dialect>
    </Programming>
    <Database>
        <Dialect>MsSql</Dialect>
        <Name>AjFirstExample</Name>
        <Username>sa</Username>
        <Prefix>ajfe_</Prefix>
        <Host>(local)</Host>
    </Database>
</Technology>

These data is used during the template generation phase. It indicates the language, and the database to use.

Generating the solution

We could send the tasks from the command line, but we have a .build file for Nant, one for each technology to generate. We execute the tasks build, buildsql, and deploysql of AjFirstExampleVbNet2.build with the command line:

nant -buildfile:AjFirstExampleVbNet2.build build buildsql

(You must adjust the line

<property name=”ajgenesis.dir” value=”…./AjGenesis-0.5″/>

to reflect your AjGenesis installation directory)

Note the following lines in the build file:

    <target name="loadtasks" description="loads AjGenesis tasks">
        <loadtasks assembly="${nanttasks.dir}/AjGenesis.NAnt.dll" />
    </target> 

    <target name="init" depends="loadtasks" description="init the AjGenesis model, create build directory">
        <mkdir dir="${build.dir}"/>
        <loadmodel model="${project.dir}/Project.xml"/>
        <loadmodel model="${project.dir}/Technologies/${technology}.xml"/>
        <executetask task="${tasks.dir}/BuildProject.ajg"/>
        <executetask task="${tasks.dir}/BuildTechnology.ajg"/>
    </target> 

These tasks load an AjGenesis NAnt tasks, load the models, and execute the tasks.

In the Build/AjFirstExample/VbNet2/Sql directory they are left scripts of creation of the base and stored procedures. And in the directory Src brother, surprise! We’ll have the generated solution:

There were generated several projects, into a solution. We can load the solution into the Visual Studio 2005:

Using another NAnt file, AjFirstExampleCSharp2.build, we can generate the same solution in CSharp:

You will find other projects and examples of .build files, that generate solutions using NHibernate, Hibernate use, JSP, and concepts of Domain-Driven Desing a la Eric Evans.

Reflections

Sure, everything cannot be generated automatically. It is important to remember always that fact. But in the day to day, we recognize that we have amount of repetitive text, tasks that we can well delegate to software.

A key point: the model in AjGenesis is free. The presented examples are only examples: we can general the model that we want, and to write the templates we need. It is important to write the templates so that the generated code is similar to what we had manually generated. If we don’t feel comfortable with the generated code, if it does not have our style, our experience, we’ll end up generating something that we do not understand.

Another thinking: the model must be independent of the technology. In the final example, we have seen how, from the same model, we can generate solutions for VB.NET, CSharp and other technologies.

Software can help us to generate software. More: it MUST help us. Our experience counts: what we learned to make applications, we can overturn it in this species of expert system, code generation tools. In the future, I hope to be able to incorporate to the project, in the templates and tasks, more decision making: as well as we gain experience in writing of applications, we can incorporate our accumulated knowledge on patterns, architecture and styles of programming.

And as it is an open source project, AjGenesis allows us extend it, to our taste and necessity.

Suggestions, use case stories, comments are welcome. You can write as comments to this post, or write directly to me. Thanks to all that tested and adopted this project, and helped me to write it.

Angel “Java” Lopez
http://www.ajlopez.com/en

New book on Domain Driven Design

Tim McCarthy is preparing a new book, with code examples (great!) in .NET, implementing the Domain-Driven Design ideas, from Evans et al. The book is for Wrox Press, in the Problem-Design-Solution series; the title will be “”.NET Domain-Driven Design with C#: Problem-Design-Solution”.

It’s great news. We need more implementation examples of DDD ideas. Although DDD has a wide choice of implementations (at high level and details), it will be important the existence of source code and reference implementacion, to the adoption of this kind of solutions.

Meanwhile, you can download some code and slides from Tim presentations:

Talk on Domain Driven Design for the OC C#/VB.NET/Architecture User Groups

Talk on Domain Driven Design for San Diego .NET Developers Group

It’s interesting his implementation of a Composite Specification, and its use in repositories:

A Composite Specification Pattern Implementation in .NET 2.0

Excellent!

Angel “Java” Lopez
http://www.ajlopez.com/en

Mini Book Domain Driven Design Quickly

InfoQ has published a mini-book (printed version with cost, free pdf to download), that is a summary of DDD, and of Eric Evan’s book on DDD.

Table of contents

This book is a short, quickly-readable summary and introduction to the fundamentals of DDD; it does not introduce any new concepts; it attempts to concisely summarize the essence of what DDD is, drawing mostly Eric Evans’ book, as well other sources since published such as Jimmy Nilsson’s Applying Domain Driven Design, and various DDD discussion forums.  Chapters of the book include:

  1. Building Domain Knowledge
  2. The Ubiquitous Language
  3. Model Driven Design
  4. Refactoring Toward Deeper Insight
  5. Preserving Model Integrity
  6. Interview with Eric Evans on why DDD matters today

About the book

Domain-Driven Design Quickly was produced by InfoQ.com, summarized primarily by Abel Avram and with Floyd Marinescu as managing editor. Special thanks to Eric Evans for his support and Vladimir Gitlevich and Dan Bergh Johnsson for their detailed reviews. The intention of this book is to get an introduction to Domain-Driven Design into as many hands as possible, to help it become mainstream.

More info on:

http://www.infoq.com/minibooks/domain-driven-design-quickly

I’ve downloaded the .pdf from

Download this book FREE (PDF)

Domain-Driven Design Resources

I have my links collection on Domain-Driven Design, and I want to post it to this blog. This list is only a disorganized collection but I think that can be useful:

Eric Evans’ Site
http://domaindrivendesign.org

My link collection on Delicious
http://del.icio.us/ajlopez/ddd

Organizing Domain Logic
http://weblogs.asp.net/pgielens/archive/2006/08/08/Organizing-Domain-Logic.aspx

Spring XT
http://springxt.sourceforge.net/index.php/Main_Page

Anemic Domain Model
http://www.martinfowler.com/bliki/AnemicDomainModel.html

Notifications
http://www.martinfowler.com/eaaDev/Notification.html

Fluent Interface
http://www.martinfowler.com/bliki/FluentInterface.html

Specifications
http://www.martinfowler.com/apsupp/spec.pdf
http://www.martinfowler.com/bliki/SpecificationByExample.html
http://sbtourist.blogspot.com/2006/01/case-for-specifications.html
http://sbtourist.blogspot.com/2006/02/another-case-for-specifications.html
http://sbtourist.blogspot.com/2006/05/idea-for-composite-specifications.html
http://sbtourist.blogspot.com/2006/05/implementing-composite-specifications.html
http://www.jeffperrin.com/index.php/2006/06/28/specification-pattern-with-predicates/

You must read all posts from Sergio Bossa
http://sbtourist.blogspot.com
http://del.icio.us/sbtourist/Domain-Driven-Design

Spring Modules XT
https://springmodules.dev.java.net/docs/reference/0.5/html_single/#about

A DDD example in Java
http://www.bettersoftwarefaster.com/
http://www.myjavaserver.com/~bswf/downloads/carserv.zip

Applying the Application Layer in Domain-Driven Design
http://weblogs.asp.net/pgielens/archive/2006/05/31/Applying-the-Application-Layer-in-Domain-Driven-Design.aspx

DDD: Can I drop my Service Layer?
http://peter.jteam.nl/?p=17

Concurrency control in databases: Introduction
http://peter.jteam.nl/?p=8

Peter Veenjter on DDD
http://peter.jteam.nl/?cat=6

Constructing View objects with the Builder pattern
http://sbtourist.blogspot.com/2006/07/constructing-view-objects-with-builder.html

Domain-Driven Design: Model Driven Architecture Done Right?
http://hinchcliffe.org/archive/2005/03/20/189.aspx

A Better Path to Enterprise Architectures
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/sessfin00.asp

Puede ser interesante este articulo de Hibernate con un Modelo de Dominio sencillo
http://www.theserverside.net/tt/articles/showarticle.tss?id=NHibernate

Avoiding Anemic Domain Models with Hibernate
http://wrschneider.blogspot.com/2005/01/avoiding-anemic-domain-models-with.html

What is a View in Domain Driven Design?
http://billhamaker.wordpress.com/2006/08/03/what-is-a-view-in-domain-driven-design/

A Proposal for an Abstract Domain Pattern « Bill Hamaker’s Blog
http://billhamaker.wordpress.com/2006/08/24/a-proposal-for-an-abstract-domain-pattern/

A Repository Example
http://abc.truemesh.com/archives/000464.html

DDD Group Blog
http://blog.gmane.org/gmane.comp.programming.domain-driven-design

Steve Eichert - Domain Driven Design
http://www.emxsoftware.com/Domain+Driven+Design

Hooking your Domain Model and UI Layer
http://www.emxsoftware.com/Domain+Driven+Design/Hooking+your+Domain+Model+and+UI+Layer

Keeping the Domain Model free from Persistence Logic
http://weblogs.asp.net/pgielens/archive/2005/07/29/420995.aspx

DDD: Aggregates & Repositories
http://www.emxsoftware.com/Domain+Driven+Design/DDD+Aggregates++Repositories

How Domain Driven Design changed my way of thinking
http://www.emxsoftware.com/Domain+Driven+Design/How+Domain+Driven+Design+changed+my+way+of+thinking

A quick comparison of Domain Model vs. Manager (Service) Model
http://www.emxsoftware.com/SOA/A+quick+comparison+of+Domain+Model+vs+Manager+Service+Model

Implementing Manager Models with a domain model
http://www.emxsoftware.com/SOA/Implementing+Manager+Models+with+a+domain+model

Vote Manager Model, Domain Model, or Both
http://www.emxsoftware.com/SOA/Vote+Manager+Model+Domain+Model+or+Both

Does SOA require Object-Message mappers It depends
http://weblogs.asp.net/fbouma/archive/2004/03/06/85105.aspx

Domain-Specific Modeling and Model Driven Architecture
http://www.bptrends.com/publicationfiles/01-04%20COL%20Dom%20Spec%20Modeling%20Frankel-Cook.pdf#search=%22domain%20driven%20example%22

Domain driven design implemented in Spring 01
http://forum.springframework.org/showthread.php?t=19429
Domain driven design implemented in Spring 02
http://forum.springframework.org/showthread.php?t=19429&page=2
Domain driven design implemented in Spring 03
http://forum.springframework.org/showthread.php?t=19429&page=3
Domain driven design implemented in Spring 04
http://forum.springframework.org/showthread.php?t=19429&page=4
Domain driven design implemented in Spring 05
http://forum.springframework.org/showthread.php?t=19429&page=5
Domain driven design implemented in Spring 06
http://forum.springframework.org/showthread.php?t=19429&page=6
Domain driven design implemented in Spring 07
http://forum.springframework.org/showthread.php?t=19429&page=7
Domain driven design implemented in Spring 08
http://forum.springframework.org/showthread.php?t=19429&page=8

http://forum.springframework.org/showthread.php?t=19429&page=5

Domain Driven Design vs Data Driven Design — Domain Driven Design
http://vikasnetdev.blogspot.com/2006/07/domain-driven-design-vs-data-driven.html

Domain-Driven Framework Layering in Large Systems
http://www.riehle.org/computer-science/research/2000/cs-2000-gebos.pdf#search=%22domain%20driven%20example%22

Test Driven Development with Domain Driven Design – Part 1
http://donxml.com/allthingstechie/archive/2005/12/15/2348.aspx

Test Driven Development with Domain Driven Design – Part 2
http://donxml.com/allthingstechie/archive/2005/12/18/2361.aspx

Domain-Driven Design, the quest for software perfection
http://coding.mu/index.php/archives/2005/02/11/domain-driven-design-the-ultimate-solution/

Some thoughts about DDD: Introduction
http://peter.jteam.nl/?p=16

DDD: Can I drop my Service Layer? (en Arquitectura)
http://peter.jteam.nl/?p=17

Domain-Driven Design Using Active Record in .NET
http://davidhayden.com/blog/dave/archive/2006/06/21/2995.aspx

Explore model-driven development (MDD) and related approaches: A closer look at model-driven development and other industry initiatives
http://www-128.ibm.com/developerworks/library/ar-mdd3/

RAD That Ain’t Bad: Domain-Driven Development with Trails
http://today.java.net/pub/a/today/2005/06/23/trails.html

Trails and Firebird
http://www.cstengel.de/tutorial/trails_firebird_tutorial/

Trails
https://trails.dev.java.net/

The Development Abstraction Layer
http://www.joelonsoftware.com/printerFriendly/articles/DevelopmentAbstraction.html

Advnace Mocking Scenarios With Active Record (using Rhino Mocks)
http://www.ayende.com/Blog/2006/04/14/AdvnaceMockingScenariosWithActiveRecordUsingRhinoMocks.aspx

Testing ActiveRecord objects
http://www.ayende.com/Blog/2006/04/14/TestingActiveRecordObjects.aspx

ADO.NET Team Blog
http://blogs.msdn.com/adonet/

LINQ to Entities vs. LINQ to SQL - What should I use and when?
http://dotnetaddict.dotnetdevelopersjournal.com/adoef_vs_linqsql.htm

Trouble with Testing “ActiveRecord” objects
http://steve.emxsoftware.com/NET/Trouble+with+Testing+ActiveRecord+objects

Repository vs ActiveRecord
http://geekswithblogs.net/gyoung/archive/2006/04/28/76647.aspx

Repository, the Foundation of Domain Driven Design
http://geekswithblogs.net/gyoung/archive/2006/05/03/77171.aspx

Lecture 23: Domain-Driven Design, Part 1
http://www.cs.colorado.edu/~kena/classes/6448/s05/lectures/lecture23.pdf
Lecture 23: Domain-Driven Design, Part 2
http://www.cs.colorado.edu/~kena/classes/6448/s05/lectures/lecture24.pdf
Lecture 23: Domain-Driven Design, Part 3
http://www.cs.colorado.edu/~kena/classes/6448/s05/lectures/lecture25.pdf
Lecture 23: Domain-Driven Design, Part 4
http://www.cs.colorado.edu/~kena/classes/6448/s05/lectures/lecture26.pdf
Lecture 30: Domain-Driven Design, Part 5 Supple Design
http://www.cs.colorado.edu/~kena/classes/6448/s05/lectures/lecture30.pdf#search=%22domain%20driven%20example%22

Domain-Driven Modeling with Aspects and Ontologies
http://www.st.informatik.tu-darmstadt.de:8080/ecoop2005/maw/acceptedPapers/Hruby.pdf#search=%22domain%20driven%20example%22

An End to End Domain Driven Development Framework
http://www.isis.vanderbilt.edu/publications/archive/Agrawal_A_10_0_2003_An_End_to_.pdf#search=%22domain%20driven%20example%22

Model View Presenter with ASP.NET
http://www.codeproject.com/useritems/ModelViewPresenter.asp#Downloads

Book Review: Applying Domain-Driven Design and Patterns
http://www.aspnetresources.com/blog/applying_ddd_patterns_book_review.aspx

The Vietnam of Computer Science
http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx

Business domain-driven Java class hierarchies for Domino
http://www-128.ibm.com/developerworks/lotus/library/ls-Java_hierarchies/index.html

Applying Domain-Driven Design and Patterns With Examples in C# and .NET
http://codebetter.com/blogs/david.hayden/archive/2006/06/04/146045.aspx

http://www.theserverside.net/tt/books/addisonwesley/DomainDrivenDesign/DomainDrivenDesign.pdf

Next-Generation Data Access: Making the Conceptual Level Real
http://msdn.microsoft.com/vstudio/default.aspx?pull=/library/en-us/dnvs05/html/nxtgenda.asp

ADO.NET Tech Preview: Entity Data Model
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/ADONET_EDM.asp

http://mondragon.angeltowns.net/paradiso/AplicacionesProyectos.html

Object Relational Mapping Resources on
http://www.orm.net
http://sourceforge.net/projects/orm

Conceptual Queries using ConQuer-II
http://www.orm.net/pdf/ER97-final.pdf

ConQuer: a Conceptual Query Language
http://www.orm.net/pdf/ER96.pdf

Conceptual Queries
http://www.orm.net/pdf/ConceptQueries.pdf

Business Rules and Object Role Modeling
http://www.orm.net/pdf/dppd.pdf

Agent Oriented Enterprise Modeling Based on Business Rules
http://www.informatik.tu-cottbus.de/~gwagner/papers/EM-BR.pdf

Dual Schema Problem
http://devhawk.net/2006/03/28/The+Dual+Schema+Problem.aspx

Understanding and Using ValueModels
http://c2.com/ppr/vmodels.html

More Patterns
http://wiki.moredesignpatterns.com

Ezequiel Jadib on NHibernate and DDD
http://ejadib.wordpress.com/2006/11/20/nhibernate-and-domain-driven-design/

Ben Scheirman posts:

A Journey with NHibernate - Part 1
A Journey With NHibernate - Part 2
A Journey With NHibernate (and DDD) - Part 3
A Journey with Domain Driven Design (and NHibernate) - Part 4
A Journey with Domain Driven Design (and NHibernate) - Part 5
A Journey with Domain Driven Design (and NHibernate) - Part 6
A Journey with Domain Driven Design (and NHibernate) - Part 7

Angel “Java” Lopez
http://www.ajlopez.com/en