Стоит помнить, что десериализация абстрактных объектов - это всегда боль в заднице, так как абстрактные классы не имеют конструктора по умолчанию; Сказав это, ничто не мешает вам десериализовать конкретный класс и вернуть и интерфейс / абстрактный класс с вашей фабрики.
Когда вы сохраняете / извлекаете данные в БД, вы просто делаете это через конкретный объект DO и создаете экземпляр объекта BO на фабрике с помощью конструктора копирования, и он реализует тот же интерфейс, что и объект DO. Но, как и в случае с шаблонами, вам нужно спросить, что вы получаете за код.
Для извлечения:
DO -> Factory -> BO
Для хранения:
BO -> Фасад / Контроллер -> DO
DO и BO реализуют интерфейс IYourObject или наследуются от YourObjectBase, у которого есть конструктор копирования YourObjectBase (YourObjectBase src).
Много строк кода, если у вас нет нескольких типов BO: -)