Trabajo con clases de Negocio

26/09/2008 - 17:04 por Guillermo Peralta | Informe spam
Hola que tal,
Les planteo una consulta acerca de cual es la manera que uds creen conviente
para realizar lo siguiente utilizando una metodologia en Capas y Orientada a
Objetos.

El planteo es tener una clase Cliente y un clase Domicilios como propiedad
de la primera que realizan el mapeo de la Base de datos a un modelo OO

Cliente

IdCliente
Nombre
Domicilios


Domicilios
Calle
Numero


Hasta ahi todo bien. Ahora necesito tener una manera de cargar tanto los
datos del cliente como los de sus domicilios, eso lo implementaria a traves
de una clase de negocio llamada NegocioClientes


El 1º planteo es tener un metodo static dentro de NegocioClientes que
provea metodos de servicios para llevar a cabo las distintas acciones

Entidades.Clientes EntidadCliente = new Entidades.Cliente ( 123 );
//inicializo con el Id del Cliente

NegocioClientes.Fill (EntidadCliente ); //cargo los datos basicos del
Cliente
NegocioClientes.FillDomicilios (EntidadCliente); //cargo los domicilios
del cliente


//accedo a los datos del cliente de la siguiente manera
string Nombre = EntidadCliente.Nombre;

string Calle = EntidadCliente.Domicilios[0].Calle;



El 2º planteo es tener dentro de la clase de NegocioClientes un objeto
EntidadClientes como propiedad y disponer dentro de Negocio metodos para la
carga de estos datos:

NegocioClientes Cliente = new NegocioClientes ( 123); //inicializo con
el Id del Cliente

Cliente.Load (); //cargo los datos del cliente

Cliente.LoadDomicilios (); //cargo los domicilios

//accedo a los datos del cliente de la siguiente manera

string Nombre = Cliente.EntidadCliente.Nombre;

string Calle = Cliente.EntidadCliente.Domicilios[0].Calle;



Espero que se entiendan los distintos planteos, funcionalmente no encuentro
mayores diferencias entre uno y otro, y es por eso que me encuentro un poco
confundido en que metodología seguir.


Saludos
Guillermo Peralta

Preguntas similare

Leer las respuestas

#6 Carlos M. Calvelo
27/09/2008 - 22:00 | Informe spam
Hola Alfredo,

On 27 sep, 21:38, Alfredo Novoa wrote:
Hola Carlos,

El Sat, 27 Sep 2008 11:51:01 -0700 (PDT), Carlos M. Calvelo escribió:

> Bueno... podría uno encontrase con Object Role Modeling (ORM / NIAM).
> Tendría sentido pararse con ese 'ORM' y no perder el tiempo con
> 'los demás'.

Ah si, me olvidaba del Object Role Modeling. Eso si que es una cosa seria.
Aunque yo tampoco lo encuentro muy útil.




Para los que anden un poco perdidos haciendo análisis de datos
con ER (o hasta con UML), es una alternativa seria.

Pero bueno, (como aclaración para los demás) esto no tiene
nada que ver con los ORM a los que se refería al principio del hilo.

Saludos,
Carlos
Respuesta Responder a este mensaje
#7 Jesús López
29/09/2008 - 18:58 | Informe spam
Mi opinión es que esos modelos son muy similares, y no veo ventajas o
inconvenientes claros para decidirse por uno o por otro. Sin embargo veo
algunos problemas graves:

1) Es muy laborioso crear toda la infraestructura para todas las tablas y
relaciones que tienes en la base de datos, es decir crear todas las clases
de las entidades con todas sus propiedades, etc, además de crear las clases
necesarias para consultar y guardar los datos en la base de datos. Sería
necesario tener alguna herramienta para generarlas de forma automática.
2) Queda cojo el tema de las consultas. Me refiero a por ejemplo responder a
preguntas como ¿qué clientes tienen algún domicilio en una determinada
ciudad?
3) No siempre es necesario cargar todas las propiedades de una clase (o
columas de una tabla).
4) La carga de una entidad por medio de su Id, puede resultar muy últil.
Pero los usuarios no suelen buscarlas por el Id sino por otros atributos,
que puede que se encuentren en otras tablas.

Si estás interesado en crear clases de entidad que mapeen con las bases de
datos yo te recomendaría que empezaras usando herramientas ya establecidas y
usadas por mucha gente en vez de crearte tú tu propio modelo. Podrías
empezar por Entity Framework que es parte de .NET Framework 3.5 SP1. O quizá
podrías usar NHibernate.

Saludos:

Jesús López



"Guillermo Peralta" @SPAM.com.ar> escribió en el
mensaje news:uQsuek%
Hola que tal,
Les planteo una consulta acerca de cual es la manera que uds creen
conviente para realizar lo siguiente utilizando una metodologia en Capas y
Orientada a Objetos.

El planteo es tener una clase Cliente y un clase Domicilios como
propiedad de la primera que realizan el mapeo de la Base de datos a un
modelo OO

Cliente

IdCliente
Nombre
Domicilios


Domicilios
Calle
Numero


Hasta ahi todo bien. Ahora necesito tener una manera de cargar tanto los
datos del cliente como los de sus domicilios, eso lo implementaria a
traves de una clase de negocio llamada NegocioClientes


El 1º planteo es tener un metodo static dentro de NegocioClientes que
provea metodos de servicios para llevar a cabo las distintas acciones

Entidades.Clientes EntidadCliente = new Entidades.Cliente ( 123 );
//inicializo con el Id del Cliente

NegocioClientes.Fill (EntidadCliente ); //cargo los datos basicos del
Cliente
NegocioClientes.FillDomicilios (EntidadCliente); //cargo los domicilios
del cliente


//accedo a los datos del cliente de la siguiente manera
string Nombre = EntidadCliente.Nombre;

string Calle = EntidadCliente.Domicilios[0].Calle;



El 2º planteo es tener dentro de la clase de NegocioClientes un objeto
EntidadClientes como propiedad y disponer dentro de Negocio metodos para
la carga de estos datos:

NegocioClientes Cliente = new NegocioClientes ( 123); //inicializo con
el Id del Cliente

Cliente.Load (); //cargo los datos del cliente

Cliente.LoadDomicilios (); //cargo los domicilios

//accedo a los datos del cliente de la siguiente manera

string Nombre = Cliente.EntidadCliente.Nombre;

string Calle = Cliente.EntidadCliente.Domicilios[0].Calle;



Espero que se entiendan los distintos planteos, funcionalmente no
encuentro mayores diferencias entre uno y otro, y es por eso que me
encuentro un poco confundido en que metodología seguir.


Saludos
Guillermo Peralta


Respuesta Responder a este mensaje
#8 Guillermo Peralta
29/09/2008 - 19:51 | Informe spam
Hola Jesús, gracias por tu comentario

1) Es muy laborioso crear toda la infraestructura para todas las tablas y
relaciones que tienes en la base de datos, es decir crear todas las clases
de las entidades con todas sus propiedades, etc, además de crear las
clases necesarias para consultar y guardar los datos en la base de datos.
Sería necesario tener alguna herramienta para generarlas de forma
automática.



Sí, de hecho de tenemos escrito "codigo que escribe código" y genera las
clases correspondientes, obviamente no es un ORM completo pero nos sirve.

2) Queda cojo el tema de las consultas. Me refiero a por ejemplo responder
a preguntas como ¿qué clientes tienen algún domicilio en una determinada
ciudad?



Para esos casos yo pensaba simplemente tener una funcion
GetDomiciliosxCiudad (Entidades.Ciudad Ciudad) que devuelva un DataTable con
los resultados de la consulta SQL (realizada a través de SP)


3) No siempre es necesario cargar todas las propiedades de una clase (o
columas de una tabla).



No claro, pero la clase puede tener distintos metodos, e ir llenando los
campos de acuerdo a la necesidad, en el ejemplo de cliente y domicilios
FillBasico () //cargo solo los datos basicos de un cliente, digamos ID,
nombre o razon social
FillCompleto () //carga todos los datos del tiemp
FillDomicilios () //carga solo los domicilios de ese cliente


4) La carga de una entidad por medio de su Id, puede resultar muy últil.
Pero los usuarios no suelen buscarlas por el Id sino por otros atributos,
que puede que se encuentren en otras tablas.



Puede ser, pero si yo necesito entrar univocamente a un cliente tengo que
hacerlo por su Identificador, puede ser que los usuarios desde la interfaz
grafica ingresen por apellido y nombre, pero la misma interfaz grafica debe
proveer medios tambien para poder recuperar ese ID (una columna oculta en un
gridview, el SelectedValue de un ListControl, etc)


Si estás interesado en crear clases de entidad que mapeen con las bases de
datos yo te recomendaría que empezaras usando herramientas ya establecidas
y usadas por mucha gente en vez de crearte tú tu propio modelo. Podrías
empezar por Entity Framework que es parte de .NET Framework 3.5 SP1. O
quizá podrías usar NHibernate.



He estado probando algunos, de hecho Cooperator Framework me gustó, pero
siento que generan demasido código que no necesito, por eso me gusta tener
control del codigo que hay en mi aplicación.

Saludos
Guillermo Peralta


"Jesús López" escribió en el
mensaje de noticias:u3n#
Mi opinión es que esos modelos son muy similares, y no veo ventajas o
inconvenientes claros para decidirse por uno o por otro. Sin embargo veo
algunos problemas graves:

1) Es muy laborioso crear toda la infraestructura para todas las tablas y
relaciones que tienes en la base de datos, es decir crear todas las clases
de las entidades con todas sus propiedades, etc, además de crear las
clases necesarias para consultar y guardar los datos en la base de datos.
Sería necesario tener alguna herramienta para generarlas de forma
automática.
2) Queda cojo el tema de las consultas. Me refiero a por ejemplo responder
a preguntas como ¿qué clientes tienen algún domicilio en una determinada
ciudad?
3) No siempre es necesario cargar todas las propiedades de una clase (o
columas de una tabla).
4) La carga de una entidad por medio de su Id, puede resultar muy últil.
Pero los usuarios no suelen buscarlas por el Id sino por otros atributos,
que puede que se encuentren en otras tablas.

Si estás interesado en crear clases de entidad que mapeen con las bases de
datos yo te recomendaría que empezaras usando herramientas ya establecidas
y usadas por mucha gente en vez de crearte tú tu propio modelo. Podrías
empezar por Entity Framework que es parte de .NET Framework 3.5 SP1. O
quizá podrías usar NHibernate.

Saludos:

Jesús López



"Guillermo Peralta" @SPAM.com.ar> escribió en el
mensaje news:uQsuek%
Hola que tal,
Les planteo una consulta acerca de cual es la manera que uds creen
conviente para realizar lo siguiente utilizando una metodologia en Capas
y Orientada a Objetos.

El planteo es tener una clase Cliente y un clase Domicilios como
propiedad de la primera que realizan el mapeo de la Base de datos a un
modelo OO

Cliente

IdCliente
Nombre
Domicilios


Domicilios
Calle
Numero


Hasta ahi todo bien. Ahora necesito tener una manera de cargar tanto los
datos del cliente como los de sus domicilios, eso lo implementaria a
traves de una clase de negocio llamada NegocioClientes


El 1º planteo es tener un metodo static dentro de NegocioClientes que
provea metodos de servicios para llevar a cabo las distintas acciones

Entidades.Clientes EntidadCliente = new Entidades.Cliente ( 123 );
//inicializo con el Id del Cliente

NegocioClientes.Fill (EntidadCliente ); //cargo los datos basicos del
Cliente
NegocioClientes.FillDomicilios (EntidadCliente); //cargo los
domicilios del cliente


//accedo a los datos del cliente de la siguiente manera
string Nombre = EntidadCliente.Nombre;

string Calle = EntidadCliente.Domicilios[0].Calle;



El 2º planteo es tener dentro de la clase de NegocioClientes un objeto
EntidadClientes como propiedad y disponer dentro de Negocio metodos para
la carga de estos datos:

NegocioClientes Cliente = new NegocioClientes ( 123); //inicializo con
el Id del Cliente

Cliente.Load (); //cargo los datos del cliente

Cliente.LoadDomicilios (); //cargo los domicilios

//accedo a los datos del cliente de la siguiente manera

string Nombre = Cliente.EntidadCliente.Nombre;

string Calle = Cliente.EntidadCliente.Domicilios[0].Calle;



Espero que se entiendan los distintos planteos, funcionalmente no
encuentro mayores diferencias entre uno y otro, y es por eso que me
encuentro un poco confundido en que metodología seguir.


Saludos
Guillermo Peralta






Respuesta Responder a este mensaje
#9 Alfredo Novoa
29/09/2008 - 19:53 | Informe spam
Hola Jesús,

El Mon, 29 Sep 2008 18:58:57 +0200, Jesús López escribió:

1) Es muy laborioso crear toda la infraestructura para todas las tablas y
relaciones que tienes en la base de datos, es decir crear todas las clases
de las entidades con todas sus propiedades, etc, además de crear las clases
necesarias para consultar y guardar los datos en la base de datos.



Y además de muy laborioso es perfectamente inútil.

Sería
necesario tener alguna herramienta para generarlas de forma automática.



Mejor que hacer una cosa que no sirve para nada automáticamente es mejor no
hacerla.

La generación de código es una muestra de mal diseño. Si puedes automatizar
la generación del código entonces es que también puedes resolver
directamente el problema utilizando un enfoque más inteligente.

2) Queda cojo el tema de las consultas. Me refiero a por ejemplo responder a
preguntas como ¿qué clientes tienen algún domicilio en una determinada
ciudad?



Eso es lo que pasa por reinventar la rueda cuadrada y querer encapsular un
lenguaje especializado en datos de muy alto nivel con algo mucho menos
potente en ese aspecto. Si se piensa un poco está claro que es una
barbaridad.

Si estás interesado en crear clases de entidad que mapeen con las bases de
datos yo te recomendaría que empezaras usando herramientas ya establecidas y
usadas por mucha gente en vez de crearte tú tu propio modelo. Podrías
empezar por Entity Framework que es parte de .NET Framework 3.5 SP1. O quizá
podrías usar NHibernate.



¿Y por que no usar una sola clase que pueda representar cualquier tabla de
la base de datos?

Yo lo he hecho siempre así y alguna vez he sido capaz de presentar
prototipos de aplicaciones con más de 100 tablas en un solo día, y
funcionando, claro.


Saludos
Respuesta Responder a este mensaje
#10 Alfredo Novoa
29/09/2008 - 20:12 | Informe spam
Hola Guillermo,

El Mon, 29 Sep 2008 14:51:27 -0300, Guillermo Peralta escribió:

Puede ser, pero si yo necesito entrar univocamente a un cliente tengo que
hacerlo por su Identificador,



Pero un cliente puede tener varios identificadores, y normalmente los
tiene.

puede ser que los usuarios desde la interfaz
grafica ingresen por apellido y nombre, pero la misma interfaz grafica debe
proveer medios tambien para poder recuperar ese ID (una columna oculta en un
gridview, el SelectedValue de un ListControl, etc)



Es decir que primero necesitas encontrar el identificador utilizando una
clave real. Siempre vas a tener alguna clave real, así que es evidente que
el identificador artificial es prescindible, que es lo que quería decir
Jesús.

Saludos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida