Category: patron diseño

Value Objects y DataTransfer Objects

By El_Hijo, February 28, 2010 10:08 pm

Value Objects y DataTransfer Objects

Ayer me surgió una duda muy interesante sobre los Value Objects y los DataTransfer Objects en la cual se definen de una forma diferente y según entiendo en Java se han llegado a confundir estos términos utilizándolos indistintamente.

Value Object:  http://c2.com/cgi/wiki?ValueObject

DataTransfer Object: http://en.wikipedia.org/wiki/Data_transfer_object

Me gustaría saber cuales son sus opiniones y como definirían los conceptos de Value Objects y de DataTransfer Objects.

¿Que es la Inyección de dependencias?

By El_Hijo, January 20, 2010 9:26 pm

Para contestar la pregunta primero tenemos que definir que es una dependencia. Una dependencia es la necesidad que tiene una estructura de programación por otra estructura es decir son todos aquellos lazos que mantiene y necesita un programa o objeto “X” por otro programa, objeto, librería o clase.

Esto lo podemos ver cuando hacemos un import en Java todas las clases que se importan producen una dependencia en la clase que las importa.

Otro concepto importante a tomar en cuenta es la inversión de control (IoC) la cual invierte el control del programar a la hora de programar ya que como todos sabemos el programador tiene el control sobre la creación de instancias sobre la llamada a métodos y muchas cosas más. Ósea un muchos casos el programador realiza su flujo pero este puede ser cambiado por la arquitectura de la aplicación o por un ente externo según la teoría de IoC.  

Ahora Inyección de dependencias es un tipo especial de IoC (Inversión de control) en el cual el programador no necesita estar creando instancias de un objeto estas son dadas por un ente externo ya sea este un contexto, un contenedor o una plataforma de programación.

Un ejemplo de una dependencia seria la siguiente.

public interface Persona{

            public String getNombre();

}

 public class Empleado implements Persona{

             private String nombre = “Empleado”;

             public String getNombre(){

                           return nombre;

              }

 }

 import com.compañia.Persona;

 public class Rol{

             private Persona persona = new Empleado();

              //Aquí ahí una dependencia hacia Persona y Empleado y una instancia que puede

             //ser inyectada la instancia de empleado, ahora con dependencia de inyección

             //podemos quitar la dependencia de empleados e invertir el control de quien

             //instancia al empleado

}

Ahora el código de Inyección de dependencias varía según el Framework o arquitectura que usemos.

 En seam por ejemplo podemos inyectar una instancia de un empleado con la anotación @In y podemos hacer ese componente accesible al contenedor de dependencias con la anotación @Name

 Ejemplo:

 @Name(“persona”)  //aquí indicamos como se llama el componente en seam

public class Empleado implements Persona{

             private String nombre = “Empleado”;

             public String getNombre(){

                             return nombre;

             }

 }

 public class Rol{

              //aquí indicamos que inyecte un componente que tenga el nombre de la

              //variable persona en cuyo caso para nosotros sería un objeto de tipo

             //Empleado ahora la ventaja de esto es  que nunca se tuvo una dependencia

            //directa con la clase empleado y dicha clase se puede remplazar por

            //cualquier otra implementación de persona sin que el sistema conozca la //clase implementadora.

            @In

            private Persona persona = null;

}

Panorama Theme by Themocracy