Как правильно создать новый экземпляр объекта с использованием шаблона хранилища? - PullRequest
0 голосов
/ 05 января 2011

Я играл с шаблоном хранилища, используя c # и .net.

Мой вопрос касается создания новых экземпляров someRepositoryObject.Все примеры, которые я видел до сих пор, используют что-то вроде этого:

using(ISomeRepository someRepository = new SomeRepository().getRepository())
{
    IsomeRepositoryObject repObj = new someRepositoryObject();
}

Не вызывает ли вызов new someRepositoryObject удаление цели использования интерфейсов?Было бы лучше сделать что-то вроде:

using(ISomeRepository someRepository = new SomeRepository().getRepository())
{
    IsomeRepositoryObject repObj = someRepository.NewsomeRepositoryObject();
}

Таким образом, сам репозиторий возвращает новый экземпляр требуемого объекта, и вызывающий код не знает, какой класс ему передается, просто он имеет типISomeRepositoryObject.

Это все для меня в новинку, поэтому я могу упустить что-то очевидное!

Любая помощь будет признательна.

Ответы [ 3 ]

0 голосов
/ 05 января 2011

Обычно я использую второй способ, который вы описали, и позволяю хранилищу создать новый экземпляр. Причина в том, что, как вы упомянули, я также пытаюсь отделить реализации интерфейсов от кода, который использует хранилище.

0 голосов
/ 05 января 2011

То, что вы только что описали, это абстрактный шаблон фабрики.В случае хранилища лучше использовать контейнер IoC для создания новых объектов.В этом случае вы вообще не будете использовать новое ключевое слово и будете работать только с абстракцией. Хранилище Мартина Фаулера

0 голосов
/ 05 января 2011

Я бы использовал Контейнеры МОК, чтобы помочь.

Ninject - хорошее решение для этого.Например, в моей программе MVC все мои контроллеры нуждаются в некотором сервисе:

public class SampleController: Controller {
    public SampleController(IService service) {}

}

, IService внедряется Ninject, только global.asax.cs должен подтверждать конкретный класс.

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