2015-03-12 2 views
0

Я изучаю шаблон репозитория. Я реализовал его в примерном проекте. Но я не знаю, какое главное преимущество репозитория.Преимущества репозитория и разница между двумя операторами

private IStudentRespostiry repository = null; 

public StudentController() 
{ 
    this.repository = new StudentRepository(); 
} 

public StudentController(IStudentRespostiry repository) 
{ 
    this.repository = repository; 
} 

Класс StudentRepository также может получить доступ к методу путем создания объекта класса.

StudentRepository obj = new StudentRepository(); 

У кого-либо есть веская причина для этого. Я знаю, что скрываю данные.

ответ

1

Основные причины, по которым люди-репозитории ссылаются, - это тестируемость и модульность. Для проверки можно заменить конкретный объект макетным, в котором используется репозиторий. Для модульности вы можете создать другой репозиторий, который, например, использует разную историю данных.

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

Есть other ways, чтобы обеспечить возможность тестирования в хранилище данных, не беспокоясь о протекающих абстракциях.

Что касается ваших примеров кода. В первом случае первый конструктор «по умолчанию» один и второй, вероятно, для IoC или тестирования с помощью mocks. IMO не должно быть «по умолчанию», поскольку оно устраняет цель фактического наличия IoC.

1

Второе заявление допускает dependency injection. Это означает, что вы можете использовать контейнер IoC для ввода правильной реализации.

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

+0

Можете ли вы объяснить немного больше? –

+0

@RichardRay Я добавил несколько ссылок и пример. Если это все еще не имеет смысла, дайте мне знать, и я попытаюсь уточнить. – RagtimeWilly

Смежные вопросы