Как обрабатывать Dtos для объектов, которые реализуют несколько интерфейсов?

Мы используем Dtos в нашем интерфейсе службы WCF, но начали сталкиваться с проблемами, когда бизнес-объект, который представляет Dto, реализует более одного интерфейса, и мы хотим вернуть Dtos в этих различных контекстах, а также иметь возможность обрабатывать Дтос полиморфно на клиенте.

Например, допустим, у нас есть интерфейс дляIBusinessObject с несколькими свойствами, содержащими детали отношений объекта, атрибутов объекта и т. д. и т. д. У меня есть несколько реализаций этого, являющегосяLinearBusinessObject которые реализуютIBusinessObject а такжеILinear, Есть и другие реализацииILinear которые не являются также бизнес-объектами, просто линейными вещами.

У нашего сервиса есть способ получить бизнес-объект. Это возвращает базовый класс Dto (BusinessObjectDto) который объявляет общие частиIBusinessObject (атрибуты отношений и т. д.) иLinearBusinessObjectDto который расширяетсяBusinessObjectDto и добавляет дополнительную информацию о линейной стороне вещей. Это нормально и позволяет клиенту обращаться с возвращеннымиBusinessObjects с некоторой степенью полиморфизма.

Мы также хотим метод, который получает линейную вещь. Это возвращает базовый классLinearDto который содержит общие линейные детали. Простая линейная реализация объекта расширяетLinearDto и все хорошо. Но теперь у меня есть проблема, так как я не могу иметьLinearBusinessObjectDtoпростираться от обоихLinearDto и иBusinessObjectDto поскольку поддерживается только одиночное наследование, и я не могу использовать интерфейсы, так как WCF не знает, какие типы затем включить в определения контракта на обслуживание в WDSL.

Итак, я начал получать 2 dtos для моегоLinearBusinessObjectтот, который происходит отBusinessObjectDto (LinearBusinessObjectAsBusinessObjectDto) и тот, который происходит от LinearDto (LinearBusinessObjectAsLinearDto), а затем конвертировать каждый на основе интересующего меня интерфейса.

Похоже, это приведет ко многим дополнительным классам Dto (которых у меня уже много), и поэтому мне интересно, есть ли лучшее решение, чем это? Или это просто то, с чем мы должны жить?

Ответы на вопрос(7)

Ваш ответ на вопрос