clases entidades y base de datos

26/04/2005 - 23:44 por andy O | Informe spam
Hola a todos.

Tengo dos clases entidades, una es continentes y otra paises(Por tomar un
ejemplo)

La relacion es de uno a muchos. En la OOP, la relacion se modelaria como por
ejemplo con Colecciones de paises en la clase continentes y con un objeto de
la clase continente en la clase paises..

Es decir en mi capa de acceso a datos en uno de los metodos , por ejemplo
getDepartamentos devuelve un ArrayList con los objetos departamentos. En
cada iteracion del SqlDataReader creo un nuevo objeto departamento lleno los
campos.
y luego lo añado al arraylist
¿Qué sucede con el campo que es del tipo continente? ¿Cómo lo lleno?
Es correcto que llame a otro método de acceso a datos por ejemplo
getContinente(int id) el cual me devuelve una ocurrencia de los continentes.
y luego lo coloco en el campo continente.

En el caso de la relacción inversa ¿Cómo implementarla?
Espero que me ayuden
Gracias.

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
27/04/2005 - 00:30 | Informe spam
On Tue, 26 Apr 2005 14:44:01 -0700, andy O
wrote:

Hola

Tengo dos clases entidades, una es continentes y otra paises(Por tomar un
ejemplo)



Normalmente se llaman tipos de entidad.

La relacion es de uno a muchos. En la OOP, la relacion se modelaria como por
ejemplo con Colecciones de paises en la clase continentes y con un objeto de
la clase continente en la clase paises..



Lo que intentas modelar es una base de datos y la OOP no tiene nada
que ver con el diseño de bases de datos. A lo que tu explicas se le
llama modelo de red y los modelos de red están obsoletos desde hace
décadas.

Es decir en mi capa de acceso a datos en uno de los metodos , por ejemplo
getDepartamentos devuelve un ArrayList con los objetos departamentos. En
cada iteracion del SqlDataReader creo un nuevo objeto departamento lleno los
campos.



Parece que estás montando un procesador de archivos encima del SGBD.

y luego lo añado al arraylist
¿Qué sucede con el campo que es del tipo continente? ¿Cómo lo lleno?
Es correcto que llame a otro método de acceso a datos por ejemplo
getContinente(int id) el cual me devuelve una ocurrencia de los continentes.
y luego lo coloco en el campo continente.



No lo es. Deberías modelar los tipos de entidad como tablas de una
base de datos y utilizar SQL para gestionar las tablas o dejar que
ADO.NET cree las sentencias SQL por ti.

En el caso de la relacción inversa ¿Cómo implementarla?



En SQL es trivial.

create table Continentes (Continente VarChar(...) primary key);
create table Paises (Pais VarChar(...) primary key, Continente
Varchar(...) foreign key references Continentes (Continente) on update
cascade on delete cascade);

Con ADO.NET puedes crear un "DataSet" que corresponda con esta base de
datos y manipular el dataset desde tu aplicación de forma que los
cambios se transmitan al SGBD automáticamente. Por ejemplo podrías
enlazar los dos "datatables" a un par de grids creando una relación
"maestro-detalle".

Para crear un formulario que permita gestionar esas dos tablas no
necesitas teclear una sola línea de código.


Saludos
Respuesta Responder a este mensaje
#2 andy O
27/04/2005 - 16:02 | Informe spam
Bueno, no estoy del todo convencido con lo que dices.
Derepente estoy equivocado en la forma de modelar las clases.

No se si me puedas enviar algun ejemplo o enlace donde se ve en forma
práctica lo que tu dices.

Espero tu respuesta, para luego refutar tu respuesta.
GRacias, por contestar.

"Alfredo Novoa" escribió:

On Tue, 26 Apr 2005 14:44:01 -0700, andy O
wrote:

Hola

>Tengo dos clases entidades, una es continentes y otra paises(Por tomar un
>ejemplo)

Normalmente se llaman tipos de entidad.

>La relacion es de uno a muchos. En la OOP, la relacion se modelaria como por
>ejemplo con Colecciones de paises en la clase continentes y con un objeto de
>la clase continente en la clase paises..

Lo que intentas modelar es una base de datos y la OOP no tiene nada
que ver con el diseño de bases de datos. A lo que tu explicas se le
llama modelo de red y los modelos de red están obsoletos desde hace
décadas.

>Es decir en mi capa de acceso a datos en uno de los metodos , por ejemplo
>getDepartamentos devuelve un ArrayList con los objetos departamentos. En
>cada iteracion del SqlDataReader creo un nuevo objeto departamento lleno los
>campos.

Parece que estás montando un procesador de archivos encima del SGBD.

>y luego lo añado al arraylist
>¿Qué sucede con el campo que es del tipo continente? ¿Cómo lo lleno?
>Es correcto que llame a otro método de acceso a datos por ejemplo
>getContinente(int id) el cual me devuelve una ocurrencia de los continentes.
>y luego lo coloco en el campo continente.

No lo es. Deberías modelar los tipos de entidad como tablas de una
base de datos y utilizar SQL para gestionar las tablas o dejar que
ADO.NET cree las sentencias SQL por ti.

>En el caso de la relacción inversa ¿Cómo implementarla?

En SQL es trivial.

create table Continentes (Continente VarChar(...) primary key);
create table Paises (Pais VarChar(...) primary key, Continente
Varchar(...) foreign key references Continentes (Continente) on update
cascade on delete cascade);

Con ADO.NET puedes crear un "DataSet" que corresponda con esta base de
datos y manipular el dataset desde tu aplicación de forma que los
cambios se transmitan al SGBD automáticamente. Por ejemplo podrías
enlazar los dos "datatables" a un par de grids creando una relación
"maestro-detalle".

Para crear un formulario que permita gestionar esas dos tablas no
necesitas teclear una sola línea de código.


Saludos

Respuesta Responder a este mensaje
#3 Alfredo Novoa
27/04/2005 - 16:49 | Informe spam
On Wed, 27 Apr 2005 07:02:05 -0700, andy O
wrote:

Bueno, no estoy del todo convencido con lo que dices.
Derepente estoy equivocado en la forma de modelar las clases.



Bueno, mucha gente cae en el mismo error.

No se si me puedas enviar algun ejemplo o enlace donde se ve en forma
práctica lo que tu dices.



http://www.intsight.com/whidbeydb/whidbey.html


Saludos
Respuesta Responder a este mensaje
#4 andy O
27/04/2005 - 17:38 | Informe spam
El enlace que me pasaste muestra varios videos que hablan de cómo hacer
databind con asistentes al estilo de jdeveloper, pero no muestra lo que yo
quería saber.

Ahora. como había leido en uno de tus post del año pasado donde discutías
el tema "clases propias vs datasets". comentaste que no era recomendado crear
clases propias y en lugar de ello usar datasets, y en lugar datasets,
utilizar SGBD distribuidas.

Correcto,pero ¿cómo modelar las clases? , ahora ¿porqué no utilizar clases
propias para representar la data en forma de objetos.? ¿Estoy pecando acaso,
se empeora el rendimiento, esta mal diseñado?

También hablabas de 3 capas base de datos - SGBD - Aplicacion. Correcto.
Pero yo planteo de la siguiente manera.


clases de negocios clases de acceso a datos -- clases entidad

Las aplicaciones ya sean Web o Exes, llaman al BO para realizar ciertas
tareas, por ejemplo ingresa usuario, en la clase Usuario de negocio hay toda
una lógica y para llevarla a cabo puedo invocar a un objeto de la clase de
acceso a datos Usuarios,
por ejemplo existe usuario.
Las clases entidad las uso para pasar data entre capas. (De alli la pregunta
original)

¿Esta mal acaso? si esta mal ¿Cómo debería hacer?

Bueno, gracias.











"Alfredo Novoa" escribió:

On Wed, 27 Apr 2005 07:02:05 -0700, andy O
wrote:

>Bueno, no estoy del todo convencido con lo que dices.
>Derepente estoy equivocado en la forma de modelar las clases.

Bueno, mucha gente cae en el mismo error.

>No se si me puedas enviar algun ejemplo o enlace donde se ve en forma
>práctica lo que tu dices.

http://www.intsight.com/whidbeydb/whidbey.html


Saludos

Respuesta Responder a este mensaje
#5 Alfredo Novoa
27/04/2005 - 18:55 | Informe spam
On Wed, 27 Apr 2005 08:38:02 -0700, andy O
wrote:

El enlace que me pasaste muestra varios videos que hablan de cómo hacer
databind con asistentes al estilo de jdeveloper, pero no muestra lo que yo
quería saber.



Pero enseñan como resolver tu problema de una forma muy sencilla. En
uno de los videos se explica como implementar una relación maestro
detalle con un dataset.

Ahora. como había leido en uno de tus post del año pasado donde discutías
el tema "clases propias vs datasets". comentaste que no era recomendado crear
clases propias y en lugar de ello usar datasets, y en lugar datasets,
utilizar SGBD distribuidas.



Ya, pero el problema es que (que yo sepa) no existe ningún SGBD
distribuido decente para Windows, así que de momento hay que apañarse
con los datasets.

Correcto,pero ¿cómo modelar las clases?



Habría que preguntarse primero si hay que crear nuevas clases o no
hace falta por que ya nos sirven las que tenemos. No siempre hace
falta "modelar clases".

En tu caso está bastante claro que no es necesario crear ninguna
clase, por que con la clase String ya tenemos suficiente para
representar a los componentes de las tablas Pais y Continente.

, ahora ¿porqué no utilizar clases
propias para representar la data en forma de objetos.?



Por que puedes crear un dataset tipado con muy poco esfuerzo usando el
IDE como enseñan los videos. Si lo quieres hacer todo por tu cuenta te
costará mucho más trabajo y el tiempo es dinero.

También hablabas de 3 capas base de datos - SGBD - Aplicacion. Correcto.
Pero yo planteo de la siguiente manera.


clases de negocios clases de acceso a datos -- clases entidad



Y donde están la base de datos y el SGBD?

Las aplicaciones ya sean Web o Exes, llaman al BO para realizar ciertas
tareas, por ejemplo ingresa usuario, en la clase Usuario de negocio hay toda
una lógica y para llevarla a cabo puedo invocar a un objeto de la clase de
acceso a datos Usuarios,
por ejemplo existe usuario.



Si te estoy entendiendo bien estás hablando de que es la aplicación la
que asegura la lógica de negocio. Esto se hacía en los años 50 y 60,
pero daba muchos problemas y para solucionarlos se crearon los
Sistemas de Gestión de Bases de Datos, que sirven para asegurar la
lógica de negocio liberando a las aplicaciones de esta tarea.

El problema es que hay mucha gente que todavía no sabe que es un SGBD
y lo usan como si fuese un simple procesador de archivos.

¿Esta mal acaso? si esta mal ¿Cómo debería hacer?



Pues podrías hacer algo parecido a lo que explican los vídeos del
enlace que te pasé.

ADO.NET deja mucho que desear, pero para una cosa tan sencilla como la
que quieres hacer te vale perfectamente. Para resolver bien este tipo
de problemas habrá que esperar a C# 3.0


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