Re: Why can't each Aggregate Root have its own collections of entities/ARs?

Tom Eugelink <[email protected]>
Newsgroups gmane.comp.programming.domain-driven-design
Message-ID <[email protected]>
No, I would prefer to have a list of continents

    class World {
       List<Continent> continents = ...;
    }


Because decoupling world and continents via id's and messages seem like overkill.

Now, if we were to switch from the domain of topography (the structure of the world), to, say, financial data associated with the topography (the financial domain), then I can see a decoupling. The Topography domain sends messages to any other domain, like Financial, or Demography or whatever, about changes in its model.

Then why not all one domain model? Because the Topography model may hold detailed information on the continents, countries, their borders, how to render, etc which has no meaning in other domains. In the other domains the entities just "are" a country without all the extra weight. By decoupling and creating adapters, each domain may evolve independent of the others.

Tom






On 2013-08-29 10:06, Jorge Branco wrote:
> Hi again!
>
> Tom,
>
>     Now if you take that further and say that a World needs to know how many Countries each Continent has to perform it's responsibilities, the only data that the World AR needs to hold is a map of ContinentID to Country count, again maintained via domain events.
>
>
>
> If I understood you correctly, you're favoring a solution along the lines of:
>
>     class World {
>       Map<ContinentId, Integer> continentsSize = ...;
>     }
>
>
> that from its inception on is updated via domain events. But if this is indeed the case, how would you deal with this if World needed also other things from continents other than size? Would you have a map for each one of the needed features?
>
> jorge
>
>
> On Thu, Aug 29, 2013 at 7:54 AM, Tom Eugelink <[email protected] <mailto:[email protected]>> wrote:
>
>     Hi Dennis,
>
>     Good question; neither I guess, I'm voicing an opinion.
>
>     In an earlier post I said that I understand the reason for this disconnected model, and I really do see the upside. I'm not closed minded, but I also see the downside. And I'm really in doubt if the gain outweighs the loss.
>
>
>
>
>
>
>     On 2013-08-29 08:41, Dennis Traub wrote:
>>
>>     Tom,
>>
>>     First off: Are you asking a question or trying to prove a point? You responses to everyone trying to answer suggest the latter.
>>
>>     That said, in my opinion Simon's answer was the first one in this thread that really broke it down to what totally makes sense. And what he proposed would radically simplify rather than complicate things. OO modelling is best done with an open mind, not a pre-defined set of "that's how we did it all the time"
>>
>>     Best
>>
>>     Dennis
>>
>>     On Aug 29, 2013 7:43 AM, "Tom Eugelink" <[email protected] <mailto:[email protected]>> wrote:
>>
>>         On 2013-08-29 00:03, Simon Fox wrote:
>>>         Now if you take that further and say that a World needs to know how many Countries each Continent has to perform it's responsibilities, the only data that the World AR needs to hold is a map of ContinentID to Country count, again maintained via domain events.
>>
>>         This of course is true, but it very much feels like "early optimalisation". I once knew a client (insurance company) who optimized its database for flexibility so far, that they ended up with two tables: one contained the datamodel, the other contained the values. Extremely flexible... Totally unusable, mainly because it performed awfully and newcomers had a very hard time getting date in and out of it.
>>
>>         Now, I'm not comparing that situation with the current discussion directly, but it illustrates that there needs to be a balance between optimization (on what ever aspect) and usability. The disconnected nature of a domain models can be a good thing, but if we go overboard, it can become a bad thing. The question is to find the sweet spot. My gut, and often in software development guts are involved, tells me that the recognition of separate DM's is wise, but bringing that down to the level of one or a few entities (like a invoice and its rows, aka aggregate roots) makes my gut go uneasy.
>>
>>         Basically the whole domain, inter and intra, becomes message driven. And such complete loose coupling also leads to complexer code, harder to follow business logic, and new people not easily being able to see (or trace) the big picture. Personally, that does not sit well. Like that database example; almost completely message driven software??? Hmmmmmm.
>>
>>         Tom
>>
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.