I am not able to clearly understand the problems of bottom up approach against which Domain Driven Design advocates. Can someone please write briefly or nudge me in the write direction? What I mean is, in Sql world we have entities represented by tables, they have relations, constraints and so on. So now how is the new approach of starting with classes as entities as proposed by DDD will benifit us? But before that, as the questions indicates, I need to understand the problems posed by bottom up approach.
In SapiensWorks Mike explain it very well:
The Domain should not be tainted with infrastructure details. If you start with the db (botton up approach), everything will evolve around it and will be constrained by it. But you don't build the application for the database, you build it for the Domain, the database is just a Persistence implementation detail.
The domain is the reason the application exists and everything should gravitates around it. The domain should not depend on anything, especially not on a persistence implementation details. When you design the Domain Entities, they should don't know anything about persistence.
I suggest you to read the complete post before continue reading here.
If you design persistence schemas first you are not taking Domain into account; not completely and with the deep needed, at least. You are designing for efficience, redundancy, normalization, relations, etc not behaviour and later you will create entities that fits into that persistence scheme. Suddenly, you will find meaningless, strange and weird things done in your entities just to match persistence schema, persistence implementation and/or persistence technologies unless you make iterations of persistence redesign.
Both aproaches, entities designed to fit persistence and persistence redesign iterations, are bad. The first one because bad entity design and SOLID breaks; the second one because is extra work and a waste of time.
How is the new approach of starting with classes as entities as proposed by DDD will benifit us?
Good entity design (what it means good Domain modeling) and/or not wastig time in persistence design iterations.