Следует ли абстрагировать бизнес-объекты с помощью интерфейсов и / или базовых классов, чтобы при их передаче использовались только интерфейсы / базовые классы?(это то, что мы делаем).
Или не следует абстрагировать сущности с помощью интерфейсов, и вы должны использовать наследование только при необходимости?
Причина, по которой я задаю этот вопрос, заключается в том, что у меня естьвсегда абстрагировал все части кода моего приложения, используя интерфейсы, насколько это возможно.Это упростило мне выполнение модульных тестов с использованием mock и т. Д. Кроме того, используя интерфейсы, я мог убедиться, что только фабричные классы действительно ссылаются на проекты, содержащие реализацию, а все остальные (например, Business Logic Layer) только ссылаютсяпроект, содержащий все интерфейсы.
Выше все работало хорошо до сих пор.Но теперь нам нужно раскрыть некоторые из наших бизнес-методов через WCF.Бизнес-методы, используемые для возврата интерфейсов, но теперь, когда я пытаюсь повторно использовать один и тот же метод и выставить его через WCF, WCF не нравится тот факт, что я использую и возвращаю интерфейсы как часть аргументов метода службы.
Теперь я мог попытаться исправить проблему, используя KnownTypes и ServiceKnownTypes, но у меня возникло мнение, что если бы я не использовал интерфейсы для бизнес-объектов, являющихся частью моего приложения, я бы не столкнулся с этой проблемой.
Поэтому мне было интересно, есть ли лучшая практика, когда речь заходит о новом проекте: должны ли у вас быть интерфейсы для всех ваших бизнес-структур или нет?