ICriteria relates to Specification like ActiveRecord-types to a domain
model. ICriteria may resemble a specification, but it is actually a
query in a fluent API format. If you want to go all the way, then you
need a real specification model that is used to create queries by the
repository.

Also, I blogged about my experiences with AR+DDD. You might find it
useful for your own decision what to do.

http://mortslikeus.blogspot.com/2009/01/active-record-and-ddd.html

-Markus

2009/1/27 Mark Jensen <don...@gmail.com>:
>
> This would actually been my next question :)
>
> usually I would do the same thing you talk about and encapulate the
> quiery, but from what I understand with DDD (not saying that this only
> goes for DDD, i have just never heard before I started on DDD), you
> are allowed to make this sort methods.
>
> using the Criterion as a parameter for method like the FindOne(),
> seems to follow the guideline/rule of the SPECIFICATION Pattern and
> thereby add flexiblity to the design.
>
> The argument to us the FindMeSomething(iNeed) and thereby making hard-
> coded quires, should be that the client would have done this anyway.
> So it makes sense to make hardcoded quires because they give you some
> convience
>
> But the issue with FindMeSomething(iNeed), is that the developer need
> to understand the inner workings/implications of using a encapsulated
> metod... meaning that, if they dont know about how the method quiries
> the database, they might pull to much data into memory and thereby
> bringing the system down.
>
> you could probably refactor yourself out of this problem, but still...
>
>
>
> /Mark
>
> On Jan 26, 3:55 pm, Markus Zywitza <markus.zywi...@gmail.com> wrote:
>> Code from the article you linked:
>>
>>         public virtual T FindOne(params ICriterion[] criteria)
>>         {
>>             return ActiveRecordMediator<T>.FindOne(criteria);
>>         }
>>
>> This moves the responsibility for creating a particular query from the
>> repository to the higher layers, who need to know about an aggregate's
>> inner workings. Once you start to optimize for n+1 etc., this
>> knowledge of the persistence is rather deepened than encapsulated.
>> A better approach is to create a bunch of
>> FindByWhateverMyAppNeeds(string iNeedThat). That's ugly, but
>> encapsulates persistence within the repository.
>>
>> -Markus
>>
>> 2009/1/26 Mark Jensen <don...@gmail.com>:
>>
>>
>>
>> > Hi Markus
>>
>> > Could you explain the contradictions a bit more for me?
>>
>> > thanks :)
>>
>> > On Jan 26, 1:22 pm, Markus Zywitza <markus.zywi...@gmail.com> wrote:
>> >> You lose nothing with dropping ActiveRecordBase but convenience.
>>
>> >> But keep in mind:
>>
>> >> 1) AR classes without ARBase make good DTOs, but still bad domain classes.
>> >> 2) Generic repositories are an antipattern. A repository should
>> >> encapsulate the knowledge of an aggregate's persistence details. That
>> >> contradicts with ready-to-use-plugs for LINQ or criteria queries.
>>
>> >> If you need to do DDD, use AR as DTO and map it to the domain layer.
>> >> If you are doing this because DDD has a momentary hype, just don't do
>> >> it at all. The "Domain Model" is not the only enterprise pattern that
>> >> yields maintainable software.
>>
>> >> -Markus
>>
>> >> 2009/1/26 Mark Jensen <don...@gmail.com>:
>>
>> >> > Hi
>>
>> >> > From what i can read on the internet people do really like this
>> >> > combination due to the placement of the persitance logic.
>>
>> >> > how ever, i know that Castles AR has something callsed
>> >> > ActiveRecordMediator which seems to be the solution to the problem
>> >> > above. (i also know ayendes rhino commons which also have an
>> >> > implementation of the repository pattern).
>>
>> >> > The questions are.
>>
>> >> > 1. Will i lose something if i stop inheritting from ActiveRecordBase
>> >> > and use ActiveRecordMediatior instead? (to me it seems like i will get
>> >> > a lot more functionality/control)
>>
>> >> > 2. Can someone me how to implement the Repository pattern with
>> >> > ActiveRecordMediator. I have found this example here
>> >> >http://www.lostechies.com/blogs/johnteague/archive/2008/05/27/using-d...
>>
>> >> > but to me it seems like I would have to make a Repository (and inherit
>> >> > from BaseRepository) for every Aggregate and then I need to
>> >> > instantiate the Repository it when i want to use it.
>>
>> >> > Is there a better way of doing this?
>>
>> >> > :)
>>
>> >> > best regards,
>> >> > Mark
> >
>

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

Reply via email to