es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Determinar roles activos y pasivos entre objetos durante la etapa inicial de diseño.

Cuando modelizo la interacción entre dos objetos, a veces me encuentro considerando qué objeto debería ser activo en la interacción y cuál debería ser pasivo, o si la interacción debería ser gestionada por un controlador de terceros.

Como ejemplo, supongamos que tenemos un Artículo y un Contenedor.

Tres posibles formas de manejar la interacción entre ellos podrían ser:

  1. item.Drop(container)
  2. container.Store(item)
  3. StorageController.Store(item, container)

Suponiendo que los 3 enfoques (y varios otros) pueden ser correctos en una determinada situación, ¿qué tipo de consideraciones haces para llegar a la elección de diseño más sostenible?

La pregunta es intencionalmente genérica, ya que estoy interesado en los principios generales que las personas aplican al asignar roles a los objetos, especialmente si la arquitectura general está en sus etapas iniciales y aún no está claro el nivel de responsabilidad que cada objeto asumirá con el tiempo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Al considerar la opción de diseño más sostenible para las interacciones entre objetos, hay algunos factores a tener en cuenta.

    En primer lugar, debemos evaluar las responsabilidades y comportamientos de cada objeto en cuestión. En el caso del Item y Container, debemos considerar qué objeto “posee” naturalmente la operación que se está realizando. Si creemos que el Container es responsable de contener el Item, podría resultar más natural utilizar el enfoque container.Store(item). Sin embargo, si creemos que el Item debería ser responsable de ser “soltado” en un Container, entonces item.Drop(container) podría ser un enfoque mejor.

    En segundo lugar, debemos considerar si la interacción es simétrica o asimétrica. Si ambos objetos tienen igual responsabilidad y agencia en la interacción, entonces una interacción simétrica podría ser más apropiada. Sin embargo, si un objeto es naturalmente más pasivo y simplemente recibe instrucciones del otro, entonces una interacción asimétrica podría ser mejor.

    Finalmente, debemos considerar la escalabilidad y mantenibilidad a largo plazo del enfoque elegido. El enfoque elegido debe ser lo suficientemente flexible como para manejar cambios en los requisitos o adiciones futuras al sistema. Si sospechamos que podría ser necesario un controlador de terceros en el futuro, podría valer la pena considerar ese enfoque desde el principio para evitar reescrituras importantes en el futuro.

    En última instancia, la elección de cómo modelar las interacciones entre objetos depende de los requisitos específicos y el contexto del sistema. Al evaluar las responsabilidades y comportamientos de cada objeto, considerar la simetría de la interacción y planificar la escalabilidad futura, podemos crear un diseño sostenible y mantenible para nuestro sistema.

Comments are closed.