16/7/2009 21:47 El Bruno

[VSTS2010] Dependencias Bidireccionales en Layer Diagram (no es para asustarse !!!)

Buenas,

 

hoy comentabamos con un compañero de trabajo sobre el diagrama Layer Diagram de VSTS 2010 y una de las cosas que le llamó la atención fue la capacidad de crear dependencias bireccionales. En la siguiente imagen se muestra la Toolbox de un diagrama del tipo Layer Diagram y el 4to elemento en la misma es una dependencia bidireccional.

image

Si pensamos en que cada componente del diagrama representa a un proyecto, es normal pensar que no tienen sentido las dependencias bidireccionales; ya que estariamos creando dependencias circulares y todos conocemos ese infierno en .Net. Pero los componentes del diagrama también pueden representar Namespaces o Clases en uno o más proyectos, con lo que si tenemos un código similar al siguiente:

   1:    class DemoClassA
   2:    {
   3:      public void Demo() 
   4:      {
   5:        DemoClassB b = new DemoClassB();
   6:      }
   7:    }
   8:    class DemoClassB
   9:    {
  10:      public void Demo() 
  11:      {
  12:        DemoClassA b = new DemoClassA();
  13:      }
  14:    }

y asociamos cada clase a un componente en el diagrama deberíamos tener un diagrama como el siguiente:

image

Si desplegamos el menú contextual y seleccionamos la opción Generate Dependencies, veremos como se dibuja una dependencia bidireccional:

image

Pues bien, para ejemplo 14 líneas de código aunque lo más interesante es que si bien existe la capacidad de crear relaciones bidireccionales, el instinto por lo general nos da un warning frente a estos escenarios o sea que debemos andar con cuidado (o eso pienso yo :D)

 

 

Saludos @ Home

El Bruno

Archivado en: ,,,
Comparte este post:

# re: [VSTS2010] Dependencias Bidireccionales en Layer Diagram (no es para asustarse !!!)

Friday, July 17, 2009 7:04 AM by Gonzalo Perez

La línea de la dependencia bidireccional debería dibujarse con rojo no? ejjejeje

Saludos!

Chalalo.

# re: [VSTS2010] Dependencias Bidireccionales en Layer Diagram (no es para asustarse !!!)

Saturday, July 18, 2009 1:31 AM by Pablo Hawkes

Bruno: Cual sería la forma más óptima de tratar este tipo de dependencias?

Para romper la referencia circular, uso un parámetro de tipo boolean que indica al procedimiento si debe buscar los objetos hijos que tiene como atributos.

Tomando tu ejemplo, sería más o menos así:

class DemoClassA

{

DemoClassB b;

public void Demo(BuscarB as boolean)

{

if (BuscarB)

b = new DemoClassB(false);

else

b = null;

}

}

class DemoClassB

{

DemoClassA a;

public void Demo(BuscarA as boolean)

{

if (BuscarA)

a = new DemoClassA(false);

else

a = null;

}

}

Suelo resolver el problema de ésta forma, aunque nunca estuve muy seguro si es una forma eficiente de hacerlo.

# re: [VSTS2010] Dependencias Bidireccionales en Layer Diagram (no es para asustarse !!!)

Saturday, July 18, 2009 2:37 PM by Pablo Hawkes

En mi código, los procedimientos deberían ser los constructores de las clases:

o sea, en ambas clases hay que cambiar los:

public void demo()

por

public DemoClassA(BuscarB as boolean)

y

public DemoClassB(BuscarA as boolean)

respectivamente.

Cosas del copiar y pegar, je!

# re: [VSTS2010] Dependencias Bidireccionales en Layer Diagram (no es para asustarse !!!)

Monday, July 20, 2009 2:15 PM by El Bruno

jeje, efectivamente lo mejor sería una flecha roja. Personalmente no encuentro muchos escenarios donde aplicarlos porque si bien la respuesta de Pablo es correcta, no se me ocurre donde puede pasar eso. (salvo una factoria genérica que para crear sus objetos utilice un ObjectBuilder que utilice la factoría para crear los mismos ... no se, el caso puede ser complicado)

Saludos

# re: [VSTS2010] Dependencias Bidireccionales en Layer Diagram (no es para asustarse !!!)

Monday, July 20, 2009 4:43 PM by Pablo Hawkes

En el último desarrollo que hice se da el caso de consulta de clientes y sucursales a la BD, en el cual una de las propiedades del cliente es la lista de sucursales asociada, y en el caso de las sucursales una de las propiedades es un objeto cliente al cual pertenece la sucursal.

En ambos casos, resuelvo la consulta cómo el ejemplo, es decir, al consultar clientes, tambien busco sus sucursales asociadas, con el parámetro en false para que cada objeto sucursal a su vez no busque a qué cliente asociado, y se genere un bucle.

En el caso de la búsqueda de sucursales, el proceso es el inverso.

# re: [VSTS2010] Dependencias Bidireccionales en Layer Diagram (no es para asustarse !!!)

Monday, July 20, 2009 4:51 PM by El Bruno

ya sabia yo que si pensaba un poco se me ocurria un ejemplo, tu me lo has dado !!! problemas con busquedas con objetos con relaciones NaN ... :D

Saludos

# [VSTS2010] Listado de Novedades (X)

Monday, September 21, 2009 6:39 PM by El Bruno

Buenas, y llegó el 10mo recopilatorio con los posts que voy escribiendo sobre las novedades de

# [VSTS2010] Listado de Novedades (XI)

Tuesday, December 22, 2009 11:03 AM by El Bruno

Buenas, 11vo recopilatorio con los posts que voy escribiendo sobre las novedades de Visual Studio 2010

# [VSTS2010] Listado de Novedades (XII)

Tuesday, January 19, 2010 1:46 PM by El Bruno

Buenas, nuevo recopilatorio con los posts que voy escribiendo sobre las novedades de Visual Studio 2010