Я хотел бы реализовать шаблон объекта доступа к данным на C++, но желательно без использования множественного наследования и / или усиления (что не нравится моему клиенту).
Есть ли у вас какие-либо предложения?





OTL (otl.sourceforge.net) - отличная библиотека баз данных C++. Это единственный включаемый файл, поэтому он не имеет всей сложности, связанной (правильно или ошибочно!) С Boost.
Что касается самого DAO, у вас есть много вариантов. Самый простой способ скрыть реализацию базы данных - это просто использовать интерфейсы в стиле C++ и реализовать уровень доступа к данным в конкретной реализации.
class MyDAO {
// Pure virtual functions to access the data itself
}
class MyDAOImpl : public MyDAO {
// Implementations to get the data from the database
}
Ответ - несоответствие объектно-реляционного импеданса. Налейте себе крепкого напитка и погуглите.
Быстрый поиск в Google шаблонов проектирования объектов доступа к данным вернет не менее 10 полезных результатов на первой странице. Самым распространенным из них является абстрактный дизайн интерфейса, как уже показал Джефф Фостер. Единственное, что вы можете добавить к этому, - это фабрику объектов доступа к данным для создания ваших объектов.
Большинство примеров, которые я смог найти с достойным кодом, находятся на Java, это общий шаблон проектирования в Java, но они по-прежнему очень актуальны для C++, и вы можете довольно легко их использовать.
Это хорошая ссылка, он очень хорошо описывает абстрактную фабрику.
Я предпочитаю абстракцию доступа к данным - Шаблон репозитория.
Я могу видеть, как это обеспечивает абстрактный интерфейс для операций доступа к данным, но мне интересно, как объекты домена связаны с объектом MyDAO для создания и сохранения.