I wasn't aware of Role-Specific Repositories, until I found this [article](http://lostechies.com/jimmybogard/2009/09/03/ddd-repository-implementation-patterns/):

> 
> Instead of a catch-all repository that exposes every method under the
>  sun, we could alternatively apply the Interface Segregation Principle
>  for role-based interfaces, and define interfaces that expose only what
>  one class needs. 
> 
> 
> 
> ```
> public interface IProductRepositoryForNewOrder
> {
>     Product[] FindDiscontinuedProducts();
> }
> 
> ```
> 
> A single repository implementation implements all Product repository
>  interfaces, but only the single method needed is exposed and used by
>  the caller.
> 
> 
> 

a) Is the difference between the two in that with *Specific Repositories* we have one specific contract per Aggregate Root, while *Role-Specific Repositories* we can have several contracts per Aggregate Root, each of these contracts tailored to the needs of particular caller operating on Aggregate Root?

b) In your opinion, what are the pros and cons of each of the two patterns? 

Thank you

**UPDATE:**

Yesterday I found one of your [answers](https://stackoverflow.com/questions/12734000/is-it-considered-a-bad-practice-for-domain-code-to-request-data-it-needs) where in essence you argue that Role-Specific repository pattern should be used:

> 
> "Another option is to use a lambda instead of OrdersSelectorService.
>  If lambdas aren't available in your language then it should be an
>  interface. The benefit over passing OrderRepository is based on the
>  interface segregation principle the goal of which is to reduce
>  needless coupling. It is unlikely that a behavior on Customer needs
>  all the methods on OrderRepository, instead it needs a specific
>  function, so make that explicit."
> 
> 
> 

Why in above excerpt you advocate the use of Role-Specific repository pattern, but here you appear to recommend using it only in special circumstances. Is the example in the other topic a special circumstance (aside – in no way am I saying you're contradicting yourself, I just don't see how the two examples are different with regards to the using or not using Role-Specific pattern)?