¿Cómo manejar Dtos para objetos que implementan múltiples interfaces?

Estamos usando Dtos en nuestra interfaz de servicio WCF, pero hemos comenzado a encontrar problemas cuando el objeto comercial que representa el Dto implementa más de una interfaz y queremos devolver el Dtos en esos contextos diferentes y también poder tratar el Dtos polimórficamente en el cliente.

or ejemplo, digamos que tenemos una interfaz para unIBusinessObject con varias propiedades que contienen detalles de las relaciones del objeto, atributos del objeto, etc. Tengo varias implementaciones de esta siendo unaLinearBusinessObject que implementanIBusinessObject yILinear. Hay otras implementaciones deILinear que no son también objetos de negocios, solo cosas lineales simples.

Nuestro servicio tiene un método para obtener un objeto comercial. Esto devuelve una clase base Dto BusinessObjectDto) que declara las partes comunes de unaIBusinessObject (atributos de relaciones, etc.) y laLinearBusinessObjectDto que se extiendeBusinessObjectDto y agrega la información adicional sobre el lado lineal de las cosas. Esto está bien y permite al cliente tratar el @ devuelBusinessObjects con cierto grado de polimorfismo.

También queremos un método que obtenga algo lineal. Esto devuelve una clase baseLinearDto que contiene los detalles lineales comunes. La implementación simple de objetos lineales se extiendeLinearDto y todo está bien. Pero ahora tengo un problema, ya que no puedo tener miLinearBusinessObjectDtoextender de ambosLinearDto y yBusinessObjectDto ya que solo se admite la herencia única, y no puedo usar interfaces ya que WCF no sabe qué tipos poner en las definiciones de contrato de servicio en el WDSL.

Así que comencé a tener 2 dtos para miLinearBusinessObject, uno que se deriva deBusinessObjectDto (LinearBusinessObjectAsBusinessObjectDto) y uno que deriva de LinearDto LinearBusinessObjectAsLinearDto) y luego convertir cada uno en función de la interfaz que me interesa.

Esto parece que va a resultar en muchas clases de Dto adicionales (de las cuales ya tengo muchas) y por eso me pregunto si hay una solución mejor que esta. ¿O es algo con lo que tenemos que vivir?

Respuestas a la pregunta(14)

Su respuesta a la pregunta