Это выглядит абсолютно нормально.Прекрасный пример того, почему вы используете абстрактный класс поверх интерфейса.Это немного похоже на шаблон стратегии, и я использовал его довольно регулярно и успешно.
Убедитесь, что то, что делает класс, все еще имеет дело с одной «заботой», а только с одной задачей.Если ваш базовый класс имеет доступ к хранилищу, но объекты представляют документы, не помещайте функциональность в базовый класс, используйте отдельный шаблон / объект хранилища.