> if entity is PurchaseOrderLine
>   Update Purchase Order

i don't think it can be based on type. CompletedPurchaseOrder and
InProcessPurchaseOrder can both have PurchaseOrderLineItems.

> IMHO, since we are going to live with this fact there's no need to achieve
> it all, and may be the solution is business specific. So keeping it with the
> events, and a simple Event Aggregator is a more elegant solution I can think
> of.

Yes... and i like that this makes it explciit what is happening in our
code. We could also make everything go through the aggregate root to
insure that we update a version number (yuck). i would prefer however
to allow a bit more flexibility in how we model this and have the
ability to do it transparently (rightly or wrongly).

cheers,

Greg

On Mon, Apr 27, 2009 at 11:30 AM, Sidar Ok <sida...@gmail.com> wrote:
>>> As I go
> through this though I keep hearing "too much magic" being whispered in
> my ear.
>
> and
>
>>> with AOP the problem is finding the root (it might be 5 levels deep)
>
> If you find the root, without knowing about the inverse relationship, that's
> gonna be magic in any framework. So to prevent it, I was thinking to KISS
> and code directly there
>
> if entity is OrderLine
>   Update Order
>
> if entity is PurchaseOrderLine
>   Update Purchase Order
>
> ...
>
> And so on (or come up with a sort of specification to centralize this logic,
> or configuration etc, but that's beyond the discussion.) That's still yucky,
> but at least not magic any more.
>
> This was the main reason why I was saying:
>
>>> If you see this as a business decision, and don't want to put it in AOP,
>
> :)
>
> IMHO, since we are going to live with this fact there's no need to achieve
> it all, and may be the solution is business specific. So keeping it with the
> events, and a simple Event Aggregator is a more elegant solution I can think
> of.
>
> On Mon, Apr 27, 2009 at 5:23 PM, Greg Young <gregoryyou...@gmail.com> wrote:
>>
>> Those are all possibilities ...
>>
>> with AOP the problem is finding the root (it might be 5 levels deep).
>> I was looking at Peter's suggestion but don't like what it requires. I
>> am currently looking at a way to do this only in proxies but the trick
>> is in finding out what aggregate root we are under while not having
>> the id carried by the domain objects ... One thing I see is having the
>> IHaveParentId be implemented by the proxy ... then have an
>> IAggregateRoot for the actual parent ... so you can just keep walking
>> up the path but none fo the objects carry the ids themselves. As I go
>> through this though I keep hearing "too much magic" being whispered in
>> my ear.
>>
>> Greg
>>
>> On Mon, Apr 27, 2009 at 11:17 AM, Sidar Ok <sida...@gmail.com> wrote:
>> > Isn't this a good candidate for AOP ? So when a child entity's version
>> > is
>> > updated, whether by NH or externally, you go and update the aggregate
>> > root(s) too.
>> >
>> > If you see this as a business decision, and don't want to put it in AOP,
>> > may
>> > be an event driven solution would do ? Child publishes
>> > HeyIHaveBeenUpdated
>> > event and have aggregates subscribe to it.
>> >
>> > Am I thinking too simple and missing something ?
>> >
>> > On Mon, Apr 27, 2009 at 4:51 PM, Greg Young <gregoryyou...@gmail.com>
>> > wrote:
>> >>
>> >> Yeah that's about what I thought ... it gets ugly also when you start
>> >> going n levels deep and end up having to walk bunches of
>> >> bi-directional relationships. This is something that really needs to
>> >> be a first class concept to work without being too complex.
>> >>
>> >> I was hoping some people had some brilliant solution that had just
>> >> alluded
>> >> me :(
>> >>
>> >> makes me curious though how exactly so many people are doing "DDD"
>> >> with nhibernate? I am suspecting more and more that these people are
>> >> in fact not doing DDD at all but instead are doing "DDD as a pattern
>> >> language". you can force everything through the aggregate  and touch
>> >> its version but yuck!
>> >>
>> >> Cheers,
>> >>
>> >> Greg
>> >>
>> >> On Fri, Apr 24, 2009 at 4:00 AM, Peter Morris <mrpmor...@gmail.com>
>> >> wrote:
>> >> >
>> >> >>
>> >> > I see what you are saying .... build an interceptor ... then make my
>> >> > root traversable from all thechildren .. have interceptor make the
>> >> > session.Update call .. Is that correct?
>> >> > <
>> >> >
>> >> > It's the way I have done it in ECO (capableobjects), I make each part
>> >> > implement IAggregatePart which has a GetRootObject I can call to
>> >> > ensure
>> >> > the
>> >> > root is updated too.
>> >> >
>> >> > If you are using Created/Modified etc on a Repository rather than
>> >> > using
>> >> > it
>> >> > only as a query mechanism then the repository can do that for you,
>> >> > because
>> >> > the only way to call Update to save the child is to go via that
>> >> > Repository.
>> >> >
>> >> >
>> >> > Pete
>> >> > ====
>> >> > http://mrpmorris.blogspot.com
>> >> > http://www.AlterEgos.com - Who do you want to be?
>> >> >
>> >> >
>> >> > >
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> It is the mark of an educated mind to be able to entertain a thought
>> >> without accepting it.
>> >>
>> >>
>> >
>> >
>> >
>> > --
>> > Sidar Ok
>> >
>> > http://www.sidarok.com
>> > http://www.twitter.com/sidarok
>> >
>> >
>> > >
>> >
>>
>>
>>
>> --
>> It is the mark of an educated mind to be able to entertain a thought
>> without accepting it.
>>
>>
>
>
>
> --
> Sidar Ok
>
> http://www.sidarok.com
> http://www.twitter.com/sidarok
>
>
> >
>



-- 
It is the mark of an educated mind to be able to entertain a thought
without accepting it.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to nhusers@googlegroups.com
To unsubscribe from this group, send email to 
nhusers+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to