views:

576

answers:

7

Hi everyone,

I'm doing a kind of research on the topic "Domain Driven Design". My question is what tools (or maybe environments) do you use, that support this paradigm?

I know that I can google it, but I wonder which of them actually work and are useful, since I have no experience with neither of them. I'm interesting mainly in the .NET Framework, but any other opinions are also welcome!

Thanks !

+1  A: 

http://www.infoq.com/articles/ddd-in-practice

try this

ratty
+ 1 Very useful article and I've already used some parts in my research :). But I was hoping to see some opinions from people that actually have used some of the tools. Thanks for the resource!
anthares
+1  A: 

We develop using the DDD paradigm with C#. From my experience, all OO languages would work, however some would be more difficult to work with. From what I've seen, Ruby on Rails seems to be built to do DDD.

To support the DDD paradigm, we built a custom framework of a few base classes.

I'm pretty sure you know about it, but the book Domain-Driven Design: Tackling Complexity in the Heart of Software is THE reference in the domain.

GoodEnough
+1  A: 

I've used the DDD-style architecture on a few projects over the past six years in .NET environments.

On the tooling side, I'd say NHibernate is your best friend in order to fairly painless support a rich domain model that's persisted in a relational database (if that's your case).

Martin R-L
+5  A: 

DDD is not bound to a specific technology or a "supporting framework" for that matter. It's more about a process to develop good software and at the core of it lies object-oriented-modelling. Every language and environment that support s OOP is therefore suited to DDD.

Nonetheless, tooling can play a supportive role to build your Domain Infrastructure.

  • Most certainly, you will find an Object-Relational-Mapper (such as (N)Hibernate) very helpful to implement your data access. They are often built around the idea of the repository and specification pattern.
  • Inversion of Control will help you achieve a Supple Design based on low coupling that remains flexible in regards to an evolving domain model. Some environments require a Dependency Injection Framework (Spring, Castle) to take full advantage of DI, others don't since they support mixins (e.g. Objective-C)
  • Business Rules Engines and Domain Specific Languages will help you implement complex business processes. Some environments provide extensive support for them (esp. Java and .NET), other don't.

Since DDD is so much about modeling and OOP, a good knowledge of the SOLID principles (again, platform agnostic) will help you along the way. Nonetheless, there are some frameworks that provide the nuts and bolts of a DDD Infrastructure (Rhino Commons, Proteus, Sharp Architecture to name a few .net projects).

Johannes Rudolph
+1  A: 

After reading chapter 2 from Manning's ASP.NET MVC in action on the suggested model, DDD seems very useful.

They suggest some references:

Domain-Driven Design Quickly by Abel Avram, Floyd Marinescu

Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans

Applying Domain-Driven Design and Patterns: With Examples in C# and .NET by Jimmy Nilsson

and

http://domaindrivendesign.org/

CRice
+1  A: 

The Naked Objects pattern, and associated frameworks.

At the very least, it provides a way to define the Ubiquitous Language, and can also be used to create complete business applications by coding domain objects, repositories, and services.

Vijay Patel
+1  A: 

One thing that I found when doing DDD is that it is best to design the domain in XML Schema. We use both .NET and Java in our architecture, but generate our objects from the Schema. This makes it easy for us to unify our domain model regardless of architecture and allows us to use complex types in Web Services without having to create adapters to translate our objects or force us to only use primitives (or serialize objects to a common format, Yuck!).

Richard Clayton

related questions