Есть ли в репозиториях скрытая зависимость от базы данных?

Например, у вас есть интерфейс IRepository . У вас также есть класс SqlRepository , который реализует интерфейс, поддерживаемый базой данных SQL. Допустим, конструктор для этого класса принимает строку подключения. Если ваш репозиторий выполняет вызовы хранимых процедур и эти вызовы являются внутренними по отношению к репозиторию, isn ' Это скрытая зависимость? Ваш репозиторий зависит не только от соединения с базой данных, указанного в строке соединения, но и от базы данных, в которой установлены надлежащие хранимые процедуры. Если в вашей резервной базе данных нет хранимых процедур, ваша программа завершится сбоем. Как вы узнаете, какие хранимые процедуры должны быть установлены для запуска вашей программы, если у вас нет доступа к коду SqlRepository ? Это тот тип скрытой зависимости, который заставляет сторонников DI съеживаться?

1
задан Robert Harvey 19 October 2010 в 04:12
поделиться

2 ответа

Да. Проблема в том, что нет возможности наложить контракты на базы данных SQL (контракты в объектно-ориентированном смысле).

То есть у нас нет возможности сказать, что база данных соответствует интерфейсу IPersonRepository , поэтому мы не можем быть уверены, что она реализует процедуру «dbo.GetPerson», которая возвращает два наборы результатов со столбцами a, b, c и d. (Или что у нас есть разрешение на выполнение этой процедуры.) Следовательно, мы не можем требовать IPersonRepository в нашей строке подключения.

Зрелые объектно-реляционные преобразователи, такие как (N) Hibernate, решают эту проблему, создавая предметно-ориентированные языки для описания этих ожиданий (их сложные спецификации конфигурации), но эти методы являются лишь частичным решением, потому что они не могут быть применены к сторона базы данных.

Это еще один аспект объектно-реляционного несоответствия импеданса , хотя я не видел ничего написанного.

1
ответ дан 2 September 2019 в 22:12
поделиться

Эм... ваш репозиторий также зависит от того, есть ли в вашей базе данных определенные таблицы, и есть ли в этих таблицах определенные столбцы. Это все зависимости, но они не особенно скрыты.

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

1
ответ дан 2 September 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: