Header Ads Widget

Ticker

6/recent/ticker-posts

Relaciones de C # entre clases

 

En los últimos tutoriales hemos pasado por el proceso de identificar varias clases que facilitarían una aplicación básica de CRM. Durante la fase de identificación, determinamos las entidades comerciales, creamos propiedades y buscamos métodos. A continuación, separamos las responsabilidades con el objetivo de reducir el acoplamiento y simplificar el código. Ahora llegamos a la fase de establecimiento de relaciones entre clases. Las relaciones definen cómo los objetos trabajan juntos para realizar el trabajo necesario para que se ejecute la aplicación.


Tipos de relaciones

Hay muchos tipos de relaciones en la programación orientada a objetos. El primero que veremos es la relación de colaboración. En una relación de colaboración, a menudo se refiere a ella como una relación "Utiliza A". Esto se debe a que puede pensar en una clase usando otra clase. El siguiente tipo de relación que veremos es una relación de composiciónSe puede hacer referencia a una relación de composición utilizando un tipo de relación "Tiene A". La idea de composición es que un objeto puede estar compuesto por otros objetos. Un pedido tiene un cliente. Un pedido también tiene un artículo de pedido. El último tipo de relación que veremos es Herencia, o una relación "Es A". Un cliente comercial es un cliente o un cliente consumidor es un cliente.


Colaboración

Aquí tenemos un diagrama de una relación de tipo de colaboración entre clases. OrderRepository "utiliza" un objeto Order para rellenar en un Recuperar y para serializar en un guardado. Lo mismo ocurre con CustomerRepository "usando un" objeto Customer y un ProductRepository "usando un" objeto Product.

relación de clases de colaboración orientada a objetos

En este código podemos ver cómo la clase CustomerRepository usa una clase Customer. Dentro del método Retrieve (), vemos cómo se crea un nuevo objeto Customer. Luego, ese objeto se completa con datos. En nuestro caso, está simplemente codificado, pero podría imaginarse que estos datos provienen de una base de datos.

CustomerRepository usa un objeto Customer una vez más en el método Save (). Para que ese método haga su trabajo, debe aceptar un objeto Cliente como parámetro. Dentro de ese método, los datos del objeto Cliente se utilizarían para persistir en la base de datos. Las clases de repositorio usan una clase de entidad para poblar la entidad, o serializar la entidad dependiendo de si se está usando en los métodos Retrieve () o Save (). Este patrón también es válido para las otras clases de repositorio con las que hemos estado trabajando.

Puede detectar una relación de tipo de colaboración cada vez que vea que una clase utiliza una instancia de otra clase para realizar una operación en la aplicación.


Composición

La composición es otro tipo de relación clave en la programación orientada a objetos. Una relación composición existe cuando un objeto de una clase, se compone de o compuesto de uno o más objetos de otra clase. También se conoce como una relación de tipo "Tiene A". En nuestra aplicación CRM existe este tipo de relación entre la clase Cliente y la clase Dirección. Un cliente "tiene una" dirección.

Relación de clases de composición orientada a objetos

En el diagrama de arriba mostramos algunas relaciones de composición. La clase de cliente "Tiene una dirección". El objeto Order también se compone de otros objetos. Cada pedido tiene un cliente, una dirección y un artículo de pedido. Además, cada artículo de pedido "tiene un" producto. Entonces podemos ver cómo un objeto dado puede estar compuesto por otros objetos para que la aplicación funcione.


Composición con referencias

La relación de composición se puede lograr utilizando referencias en nuestro código, que aprovechan las propiedades de la claseEchemos un vistazo a la clase Cliente para ver cómo funciona. Primero veremos la relación de composición entre la clase Cliente y la clase Dirección. En el siguiente código, hemos resaltado una propiedad específica. El objeto Cliente se compone de uno o más objetos Dirección. ¿Por qué uno o más? Porque puede haber una dirección particular o una dirección del trabajo. Entonces usamos una propiedad de tipo Lista para permitir que uno o más objetos de Dirección ayuden a componer un objeto Cliente. Una declaración de propiedad en la clase Cliente establece la relación de composición entre la clase Cliente y la clase Dirección. También tenga en cuenta que dado que esta propiedad es una lista, debe inicializarse en el constructor como también vemos a continuación. Si no es así, provocaría una excepción de valor nulo.

La conclusión clave es que en las relaciones de estilo de composición, un objeto de una clase se construye a partir de objetos de otra clase. En este caso, la construcción de un objeto Cliente construye una Lista de objetos de Dirección. A menudo, se prefiere la composición a la herencia.


Poblando los objetos referenciados

Para completar el objeto Cliente con datos, necesitamos algún código para hacer el trabajo de recuperar esos datos. Lo mejor sería colocarlo en una clase AddressRepository. Se utilizará para obtener una o más direcciones para un Cliente. Al igual que las otras clases de repositorio en esta aplicación CRM, la clase AddressRepository tiene un método Retrieve () y Save ().

Curiosamente, lo que podemos hacer ahora es establecer una relación de colaboración entre las clases CustomerRepository y AddressRepository. Para mostrar la dependencia en AddressRepository en CustomerRepository, definimos la relación en la parte superior de la clase y creamos una instancia en el constructor. Además, la propiedad privada addressRepository ahora contiene un objeto AddressRepository. El método Retrieve () ahora está actualizado para usar el método RetrieveByCustomerId () que existe en AddressRepository. Ese código está resaltado aquí.

Entonces, ¿cuál es el propósito de este código? Bueno, ahora, cuando cualquier código solicite recuperar un cliente, ahora recuperará un cliente y sus direcciones asociadas de una sola vez.


Composición con ID

Una relación de tipo de composición también se logra mediante el uso de id en lugar de una propiedad de una clase. El uso de id en lugar de propiedades de objeto para la composición tiene varios beneficios. El acoplamiento se minimiza a medida que se eliminan las referencias directas. Puede pensar en estos como simples relaciones de identificación. En el código siguiente, destacamos la relación de composición entre un Pedido y el Cliente, así como la relación de composición entre el Pedido y la Dirección. Estas relaciones se definen con identificadores enteros de propiedad pública. Ahora, cuando el OrderRepository complete el pedido, se completarán estos identificadores de propiedad.

Eso es genial, pero tenemos un problema. Esas identificaciones son solo eso, números enteros simples. En realidad, no nos muestran ninguna información. El pedido no tendrá el nombre del cliente ni la dirección de envío porque solo usamos identificaciones simples. No hay ningún objeto Cliente ni un objeto Dirección rellenado. Como resultado de simplificar la clase Order, ahora necesitamos clases adicionales para poder mostrar una Order. Podemos comenzar con una clase OrderDisplay.

Esta clase solo contiene las propiedades necesarias para mostrar un pedido. No hace referencia a propiedades de otras clases, sino que utiliza las suyas propias para la información del pedido. Existe una relación de composición con la clase OrderDisplayItem que veremos en un momento. Necesita esta relación para conservar una lista de elementos asociados con un pedido. La clase OrderDisplayItem se muestra a continuación. Contiene solo las propiedades necesarias para mostrar los artículos del pedido en el pedido.

¿Cómo se usa este código? Añadiendo un nuevo método a la clase OrderRepository. Tenga en cuenta el código resaltado que muestra el método RetrieveOrderDisplay (). Dentro del método, el código está configurado para recuperar la información de OrderDisplay y OrderDisplayItem.


Herencia

En la programación orientada a objetos también tenemos el estilo de relación de herencia. En Herencia tienes un tipo de relación "Es A". La herencia le permite crear una clase que hereda los miembros de su clase principal o base. Esto le permite definir un tipo de clase más específico. Así que considere la clase Cliente. Podríamos tener clientes comerciales y clientes educativos. Ambos son clientes, pero diferentes tipos de clientes. Esto permite la reutilización del código, ya que las clases secundarias que heredan miembros de su clase principal utilizan las propiedades y métodos ya definidos en la clase principal.

relación de herencia orientada a objetos

Cuando usa la herencia en C #, solo puede heredar directamente de una clase. Sin embargo, puede configurar cadenas de herencia si lo desea. En otras palabras, podría tener una clase de Cliente y una clase de Educación que hereda de Cliente. Luego, puede configurar una clase universitaria, que herede de la clase Educación.


Resumen de relaciones de C # entre clases

En este tutorial, echamos un vistazo a las relaciones entre clases en una aplicación C #. Vimos que una relación de Colaboración se conoce comúnmente como una relación "Utiliza A". Las clases con una relación de colaboración utilizan una instancia de la clase necesaria y llaman a sus propiedades o utilizan sus métodos. La clase OrderRepository usa una instancia de la clase Order al recuperar o guardar un pedido como se ve en este código aquí.

Además, la clase AddressRepository usa una instancia de la clase de dirección al recuperar o guardar una dirección. La clase CustomerRepository usa una instancia de la clase Customer al recuperar o guardar un cliente. Entonces puedes ver cómo funciona este tipo de relación.

También echamos un vistazo a las relaciones de composición que utilizan la convención "Tiene A". Las relaciones de composición se pueden configurar de dos formas. La primera es definir una propiedad en una clase que hace referencia a una clase diferente. En la Clase de Cliente definimos una Lista de Direcciones. Esta es realmente una lista de objetos de dirección. La propiedad AddressList define la relación de composición entre la clase de cliente y la clase de dirección.

La segunda forma de establecer una relación de composición es mediante el uso de identificadores. Un ejemplo de esto es cuando agregamos una identificación de cliente y una dirección a la clase de Pedido Dado que estas clases solo usan identificadores en lugar de referencias de objetos, es más fácil recuperar y guardar los datos del pedido. Con este enfoque, es posible que deba agregar clases adicionales para obtener una funcionalidad completa, como poder mostrar un pedido. Finalmente, echamos un vistazo rápido a la herencia en la programación orientada a objetos, que establece la convención "Es A".


Publicar un comentario

0 Comentarios