На мой взгяд у вас получилось слишком строгое следование принципам N-Layered Architecture и Repositiry Pattern. Всё вроде сделано правильно, но этот подход, по-моему, не покрывает все возможные случаи. С одним из таких вы и столкнулись. Строгое следование CRUD в репозитории не оставляет места для более высокоуровневых операций, поскольку либо их надо решать уровнем выше, но тогда это скажется на быстродействии и несколько усложнит код.
Могу порекомендовать почитать следующее.
По архитектурам:
habrahabr.ru/post/233747 - Луковая архитектура. Часть 1
blog.8thlight.com/uncle-bob/2012/08/13/the-clean-a... - The Clean Architecture
•
alistair.cockburn.us/Hexagonal+architecture - Hexagonal architecture
• Onion Architecture
○
jeffreypalermo.com/blog/the-onion-architecture-part-1
○
jeffreypalermo.com/blog/the-onion-architecture-part-2
○
jeffreypalermo.com/blog/the-onion-architecture-part-3
○
jeffreypalermo.com/blog/onion-architecture-part-4-...
•
blog.8thlight.com/uncle-bob/2011/09/30/Screaming-A...
Про CQRS:
blog.byndyu.ru/2014/07/command-and-query-responsib...
blog.byndyu.ru/2014/05/blog-post.html
Про Repository:
blog.byndyu.ru/2011/01/domain-driven-design-reposi...
blog.byndyu.ru/2011/08/repository.html
lostechies.com/jimmybogard/2012/10/08/favor-query-...