Сначала код, который вы разместили, не является шаблоном хранилища. Где коллекция как интерфейс? Если это агрегат, он должен возвращать только агрегатный тип.
Шаблон репозитория не дает большой гибкости, когда он может выбирать различные типы. Шаблон репозитория следует интерфейсу коллекции (вставка / добавление / обновление / удаление / получение / и т. Д.), Зеркально отражая объект в памяти, и он обычно извлекается только по типу. Поэтому, если бы вы использовали шаблон репозитория, вам нужно было бы выбрать все CustomerAddresses и затем * отфильтровать страны. Я бы посоветовал вам перейти на другую схему, которая обеспечивает большую гибкость, то есть DAO.
Если эти вещи всегда будут поддерживаться через CustomerAddress, переключите шаблоны и создайте класс DAO, который предлагает некоторые другие методы получения для других типов вещей, которые вам нужны.
На более общей ноте построить для нужд .
Никогда не создавайте классы репозитория вслепую, это кошмар обслуживания. Единственный раз, когда я бы поспорил за репо для каждой таблицы, это когда вы делаете вещи, подобные CMS, и должны иметь возможность создавать все.
Пример:
Итак, у вас есть CustomerAddress, который связывает воедино Клиента и Страну, но у вас есть другой процесс, который должен быть в состоянии CRUD для Страны. В результате вам нужен * репозиторий для манипулирования страной, и если вы следуете за СУХОЙ, вы не хотите иметь дублирующую логику для манипулирования странами. То, что у вас будет, - это Клиентский Репозиторий, который использует Страновой репозиторий.