¿Cómo construir una estructura de clase, cuando los miembros también están estructurados jerárquicamente?

Estoy creando una aplicación web PHP, que debería proporcionar al usuario la posibilidad de ordenar una "instalación" / configuración de una conexión (ConnectDirect o File Transfer Gateway) entre él y otra persona / organización.

(Las especificaciones técnicas de la implementación de la conexión no son importantes: en la aplicación solo se trata de las conexiones como producto, que se pueden ordenar y administrar).

La jerarquía de clases para su capa de modelo debe representar la siguiente infraestructura del mundo real:

Existenconexiones, eso se puede pedir.Una conexión puede ser una conexión de IBM Connect: Direct o una conexión de IBM File Transfer Gateway.A discos compactos la conexión es directa desde A (fuente) a B (objetivo)A FTGW la conexión consistefísicamente de dos conexiones: A (fuente) al servidor FTGW y del servidor FTGW a B (destino), perológicamente (para el usuario que realiza el pedido) también es una conexión.(También hay un caso de una conexión FTGW, que usa Connect: Direct como protokoll).Cadapunto final es una fuente o un objetivo.

Entonces veo los siguientes elementos lógicos:conexión lógica, conexión física, papel (fuente yobjetivo),tipo de conección, orden, punto final, tipo de punto final (CD y FTGW).

La estructura que tengo actualmente se ve así:

Pero hay algunos problemas con esto:

Existendos árboles de jerarquía, donde cadaelemento del unoconsiste contiene elementos de un particularsubconjunto del otro (cada conexión de CD consta de puntos finales de CD; cada conexión FTGW consta de dos puntos finales FTGW, o más correctamente: cada conexión lógica FTGW consta de dos conexiones físicas FTGW, y cada una de ellas consiste en un punto final FTGW y el servidor FTGW como segundo punto final).

Una alternativa podría ser reemplazar la relación entreEndpoint yPsysicalConnection por dos relaciones:EndpointCD-PsysicalConnectionCD yEndpointFTGW-PsysicalConnectionFTGW.

Pro: Mas consistente; elimina la imprecisión lógica (o tal vez inclusoError) de la posibilidad falsa de construir cada conexión (tipo) desde un par de puntos finales.Contra: En realidad, el requisito de contener dos puntos finales es una característica de cada conexión física: desde este punto de vista, el lugar correcto para esto es el más básicoPsysicalConnection clase.

Cadapunto final puede serambos fuente y destino ycontiene no solo las propiedades de punto final comunes, sino tambiénpropiedades de origen y destino. Eso significa que, dependiendo del rol actual del punto final, algunas propiedades sonresiduos. Y esto también influirá en la estructura de la base de datos (columnas, quea veces tiene que ser configurado ya veces tener que biNULL)

Una alternativa es extender la jerarquía ...

a. ... por clases comoEndpointSource yEndpoitTarget heredando directamente de laEndpoint y ser heredado por las clasesEndpointCD yEndpointFTGW (eso significa: dos subárboles idénticos - bajoEndpointSource Y debajoEndpointTarget);

si. ... por clases comoEndpointCDSource yEndpointCDTarget (heredando de la claseEndpointCD) yEndpointFTGWSource yEndpointFTGWTarget (heredando de la claseEndpointFTGW) siendo heredado cada uno por las clases concretas de punto final CD o FTGW (eso significa: dos veces dos subárboles idénticos);

C. ... por clases comoMyConcreteEndpoint***Source yMyConcreteEndpoint***Target heredar de las clases concretas de punto final (eso significa: cadaMyConcreteEndpoint la clase se vuelve abstracta y obtiene dos subtítulos:MyConcreteEndpoint***Source yMyConcreteEndpoint***Target, p.ej.EndpointCDLinux ahora es abstracto y es heredado porEndpointCDLinuxSource yEndpointCDLinuxTarget)

Pro: elimina las propiedades de desecho.Contra: Una jerarquía de clase (más) compleja.

Bueno, se trata de arquitectura de software y debería (y por supuesto lo será) mi decisión de diseño. Pero sería bueno escuchar / leer a algunos expertos (o no expertos), cómo manejar este caso. ¿Cuáles son las formas adecuadas de organizar los elementos lógicos para una infraestructura como la que describí?

Respuestas a la pregunta(1)

Su respuesta a la pregunta