Шаблон репозитория - поиск репозитория на основе типа - PullRequest
1 голос
/ 11 августа 2009

Приложение, над которым я сейчас работаю, интенсивно использует шаблон репозитория с NHibernate. У нас есть базовый базовый класс репозитория, который реализует стандартные операции получения и сохранения. Этот класс затем наследуется репозиториями для каждого типа. Эти репозитории могут затем добавить свои собственные методы, специфичные для типа (и переопределить сохранения и получение, если необходимо).

Это работает хорошо, и с точки зрения разделения проблем это означает, что наши бизнес-объекты являются POCO, а наши классы репозитория обрабатывают особенности сохранения. практически, однако, было бы очень полезно, если бы у нас был тип, который мог бы сказать «Получите мне хранилище, которое может сохранить этот тип». Какие модели могут быть использованы для этого? Нужно ли вести собственную таблицу поиска? можно ли как-нибудь автоматически поддерживать таблицу поиска?

Ответы [ 2 ]

6 голосов
/ 11 августа 2009

Похоже, вы готовы к внедрению Dependency Injection Framework

0 голосов
/ 11 августа 2009

Используя отражение и некоторые соглашения об именах, например:

DomainObjectNameRepository

Вы можете динамически создать экземпляр репозитория, который вы ищете, используя Activator.CreateInstance. Если вы знаете, как они названы, используя пример в качестве примера выше. В противном случае у вас также есть шаблон реестра. Например, создайте элемент сопоставления внутри файла web.config, а затем в реестре можно будет создать метод ResolveRepository.

Registry.ResolveRepositoryFor<T>() where T:DomainObject;

Еще одним бонусом к этому является то, что вы можете использовать с ним МОК, инверсию управления на примере Unity.

Файл сопоставления будет сопоставлять DOmainObject с репозиторием, а затем внутри метода реестра, затем он может использовать Unity для разрешения экземпляра этого конкретного репозитория, например, и иметь их как одиночные экземпляры.

Andrew

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...