Я не думаю, что это обязательно плохо иметь набор интерфейсов и базовых классов, реализующих те интерфейсы, которые предоставляют некоторые общие функциональные возможности, которые вы хотите использовать в своих бизнес-объектах, если ваши бизнес-объекты не обязаны выводиться из этих базовых классы. Это дает вам гибкость в реализации и обеспечивает удобство реализации.
Например, у меня есть интерфейс IValidatedEntity, который применяется практически ко всем создаваемым мной бизнес-объектам. Это требует, чтобы бизнес-объект реализовал некоторые правила проверки. Однако мои объекты аудита создаются только для внутреннего использования, и я использую модульное тестирование, чтобы убедиться, что не могу создать недопустимые объекты аудита, чтобы эти классы не реализовали интерфейс IValidatedEntity
Большинство моих классов, которые принимают данные из Интернета И содержат строковые данные, получены из класса XSSValidatedEntity (который реализует интерфейс IValidatedEntity), но предоставляют проверку XSS через анализатор HTML, чтобы предотвратить внедрение HTML в базу данных. Для большинства моих классов это работает нормально, но в тех случаях, когда я хочу разрешить ограниченный (безопасный) HTML, я, очевидно, не могу наследовать от этого класса.