Как правило, когда вы знаете, какую базу данных использует ваша компания или вы, вы нацеливаетесь на этот конкретный тип базы данных.Если вы знаете его Oracle, то вы используете связанные с ним классы Oracle, если это SQLClient, тогда вы используете SqlClient и т. Д.
Теперь, если вы не уверены, какой это тип, то вы бы пошли наобщая / обобщенная форма ссылки, так что вы можете достичь своей цели, не беспокоясь о типе базы данных.Иначе, можно написать несколько условных операторов для проверки типа базы данных, а затем выполнить операции в соответствии с ней.
Обычный сценарий, который поможет вам понять, будет следующим: если вы пишете код,что ваш конечный пользователь может изменить файл конфигурации и ввести строку подключения для подключения к базе данных, что вы бы использовали?Это место, где DbFactory и его соответствующие классы пригодятся, где вместо написания кусков кода вы используете универсальный класс (вроде бы), чтобы справиться со всем.
Имейте в виду, что если вы делаете targetконкретного поставщика, у вас будет лучшая производительность (так как DbFactory должен разрешить вашего поставщика внутренне перед его обработкой), но если вы не уверены в поставщике конечного пользователя, тогда ваш код будет большим, а не эффективным.
Переходя к вашему другому вопросу: абстрактное или конкретное.Это до вас и снова, его сценарий.Преимущество abstract состоит в том, что вы можете FORCE / TIE настроить клиента на соответствие правилам (например, интерфейсу), а также обобщать вещи, а также использовать приведение типов (аналогично конкретным классам) для доступа к методам подкласса, чтобы что-то делать (проверьтепо этой теме, если можете. Используя полиморфизм времени выполнения, вы можете использовать один объект и вызывать метод, который имеет разные реализации в разных классах, подклассов к этому родительскому классу, о которых вам никогда не нужно беспокоиться - например, вычисление процентовможет быть, простые проценты и сложные проценты для банка, которые рассчитываются соответствующим классом, но вас это не волнует, так как вы просто говорите - GetInterest () и boom!).
Клубя оба вместе, я быскажем, в сценарии, когда вы не знаете тип базы данных, используемой конечным пользователем, и не зная строку подключения, вы можете заставить конечного пользователя реализовать ваш класс, ОСУЩЕСТВЛЯТЬ свой абстрактный метод для инициализации строки подключения итогда пеВыполните необходимую операцию, чтобы выдать вывод.
Надеюсь, это поможет.