Я искал для обсуждения по этому вопросу, как Google, так и Stackoverflow; «замена подстановки», «замена реализации» и т. д. не дали мне никаких результатов.Переключение реализаций интерфейса
Предположим, у нас есть интерфейс DB
, а моя текущая реализация - Postgresql
. Теперь я хочу обменять свою версию на MySQL
. Что было бы подходящим способом сделать это? У меня есть пара идей себе:
- Have
DB.h
иDB.cpp
, файл CPP, содержащий реализацию Postgresql. Теперь просто переименуемDB.cpp
вDB.cpp.postgresql
и реализацию MySQL доDB.cpp
. Postgresql.h/Postgresql.cpp
иMySQL.h/MySQL.cpp
, изменение фактического заявления#include<>
. Это кажется неправильным; сотни файлов могут использовать это, так что это приведет к много ненужной работе.- Внесите контейнер IoC и разрешите драйвер/разъем DB оттуда.
Являются ли какие-либо из этих трех правильными, или у нас есть другой общий способ достичь этого?
Вы уверены, что вам нужна только одна реализация в вашей программе? Если это так, то я не понимаю, почему сотни файлов будут включать MySQL.h вместо DB.h в первую очередь. – MikeMB
1 и 2 работают над разными предположениями, извините, если я не прояснил это. 'DB.h' не существует во втором примере, в примере 2 предполагается, что у нас нет' DB.h', но файл заголовка для подключения к базе данных называется по фактическому имени драйвера :-) I ' m довольно уверен, что подход 2) является субоптимальным или просто неправильным. – Dencker
Кстати, это не настоящий случай, просто псевдо-пример. – Dencker