Solución a las referencias circulares

29/11/2004 - 16:49 por erseco | Informe spam
Estoy diseñando una aplicación (en Mono / .NET ) y me gustaría darle
un diseño totalmente modular, para facilitar la colaboración de
varias personas al proyecto, la cuestión es como ínter-operarían
esos módulos.

Supongamos un caso, yo diseño un módulo llamémosle A en que hay
definidas unas clases para realizar una determinada tarea, llega otro
desarrollador y diseña otro modulo B que hace uso de esas clases,
hasta ahí perfecto, el problema es que un módulo A requiera al B y el
B al A también, produciéndose una referencia circular.

Una posible solución al proyecto sería implementar un servidor http
interno (en un módulo de comunicaciones) que haría referencia a todos
los módulos, así que para hacer uso de cualquier otro módulo, el
modulo tendría que hacer una petición al módulo de comunicaciones,
pero esto no es demasiado viable, puesto que cada modificación en
cualquiera de los módulos haría que se tuviera que modificar el
módulo de comunicaciones

También he estado mirando SOAP, pero no he llegado a comprender las
ventajas que me brindaría

Otra opción sería usar servicio web, pero si quieres usar un par de
módulos para algo trivial, tener que montar una infraestructura
demasiado grande para algo sencillo.

La finalidad de todo esto es intentar reducir la duplicidad de código
al mínimo, y que cada desarrollador que quiera colaborar tenga una
base totalmente testeada y pueda enfocarse a la tarea para la que esté
más cualificado, aparte de la ventaja de que cualquier mejora en un
módulo automáticamente sería aprovechada por los demás módulos.
¿Alguna idea de cómo montarlo?
 

Leer las respuestas

#1 Guillermo guille
01/12/2004 - 18:27 | Informe spam
Hola,

Me imagino que al hablar de módulos te estás refiriendo a clases, clases que
finalmente se convertirán en objetos (instancias en memoria).
Si desde la clase A creas un objeto del tipo B, tendrás en memoria un objeto A
y otro B
Si desde el objeto B referencias al mismo objeto A (el típico Parent), entoces
estás creando una referencia circular.

Tu temor es que se destruya (deje de usar) el objeto B (o A), pero que al
existir esa referencia circular, ninguno de los dos objetos se destruyan.
Pues estate tranquilo, que el .NET se encarga de esos casos, (realmente el
recolector de basura/objetos no usados)
Es decir, no ocurre lo que antes ocurría con los objetos COM, en los que se
podían quedar "referencias perdidas".

Si es otra cosa a lo que te referías, yo no me he enterado... ;-)

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Te invito a mi sitio dedicado al VB y más...
http://www.elguille.info/
http://www.mundoprogramacion.com/
(puede que el correo usado sea anti-spam)


"erseco" wrote in message
news:
Estoy diseñando una aplicación (en Mono / .NET ) y me gustaría darle
un diseño totalmente modular, para facilitar la colaboración de
varias personas al proyecto, la cuestión es como ínter-operarían
esos módulos.

Supongamos un caso, yo diseño un módulo llamémosle A en que hay
definidas unas clases para realizar una determinada tarea, llega otro
desarrollador y diseña otro modulo B que hace uso de esas clases,
hasta ahí perfecto, el problema es que un módulo A requiera al B y el
B al A también, produciéndose una referencia circular.

Una posible solución al proyecto sería implementar un servidor http
interno (en un módulo de comunicaciones) que haría referencia a todos
los módulos, así que para hacer uso de cualquier otro módulo, el
modulo tendría que hacer una petición al módulo de comunicaciones,
pero esto no es demasiado viable, puesto que cada modificación en
cualquiera de los módulos haría que se tuviera que modificar el
módulo de comunicaciones

También he estado mirando SOAP, pero no he llegado a comprender las
ventajas que me brindaría

Otra opción sería usar servicio web, pero si quieres usar un par de
módulos para algo trivial, tener que montar una infraestructura
demasiado grande para algo sencillo.

La finalidad de todo esto es intentar reducir la duplicidad de código
al mínimo, y que cada desarrollador que quiera colaborar tenga una
base totalmente testeada y pueda enfocarse a la tarea para la que esté
más cualificado, aparte de la ventaja de que cualquier mejora en un
módulo automáticamente sería aprovechada por los demás módulos.
¿Alguna idea de cómo montarlo?

Preguntas similares