Я занимаюсь разработкой библиотеки классов модели домена C ++, которая должна предоставить некоторые средства или среду (например, классы интерфейса и т. Д.) Для записи / чтения данных экземпляра класса в / из двоичного файла и РСУБД. Основой для этой библиотеки является приложение, которое использует СУБД, и существует несколько методов, которые создают экземпляр класса, выполняя последовательность вызовов извлечения и обновления базы данных для извлечения коллекций данных членов. Доступ к сериализованным данным имеет другой способ организации данных, поэтому я хочу, чтобы модель предметной области полностью игнорировала первичные / внешние ключи, идентификаторы и т. Д.
Чтобы решить эту проблему, я подумываю использовать шаблон Объект доступа к данным (DAO) и хотел бы получить несколько советов о «гранулярности», времени жизни и использовании объектов DAO (в ваших ответах: обратите внимание, что я буду использовать C ++, а не Java, и что класс домена не может содержать никакой информации ID / ключа из RDBMS или хранилища двоичных файлов):
- Есть ли у каждого экземпляра Foo объекта домена свой экземпляр FooDAO или для всех экземпляров класса Foo существует один экземпляр FooDAO?
- FooDAO создается один раз для каждого экземпляра Foo, или экземпляр FooDAO будет создаваться только тогда, когда необходим доступ к данным, и уничтожаться сразу после этого?
- Страница J2EE в DAO представляет DTO в дополнение к DAO. Почему DAO не может передавать данные?
- Для сложного класса домена Foo, который имеет экземпляры других классов домена Bar, кажется неизбежным, что класс FooDAO использует класс BarDAO для извлечения данных. Это приведет к параллельным иерархиям / зависимостям в структуре классов домена и структуре классов DAO. Как это можно сделать лучше всего?
Спасибо за вашу помощь!