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

#6 andy O
27/04/2005 - 23:22 | Informe spam
Mira entra a
http://download.microsoft.com/downl...ciones.ppt
explica la metodología de capas que estoy aplicando.

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.



Entonces ¿la lógica del negocio la implementas en SGBD por medio de
triggers, prodedure,funcion, etc?

Pero al poner toda la lógica de negocio en el SGBD no te estas "amarrando" a
esta; que sucede si se quiere cambiar de SGBD.

Según mi opninión, si toda la logica de negocio la implementas en un
servidor de aplicaciones donde residen estos componentes de negocio y acceso
a datos (siempre usando el estandar SQl), creo que sería más flexible o me
equivoco.
Bueno diras que hay más trafico de red entre servidores, pero se gana
flexibilidad. no dependes del SGBD.

Bueno dices que metodología que uso es antigua, entonces porque Microsoft
la plantea.

Lo del DataSet con el IDE no te refuto porque es muy rápido, pero al final
de cuentas queria diseñar algo más orientado a objetos (naturalmente
hablando), porque los datasets suenan mucho a xml.

Gracias de nuevo.
Espero tu respuesta







"Alfredo Novoa" escribió:

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
#7 Alfredo Novoa
28/04/2005 - 02:00 | Informe spam
On Wed, 27 Apr 2005 14:22:59 -0700, andy O
wrote:

Mira entra a
http://download.microsoft.com/downl...ciones.ppt
explica la metodología de capas que estoy aplicando.



Ese documento tiene muchos errores de bulto. Está escrito por gente
que no tiene conocimientos de teoría de sistemas de bases de de datos.

Esa arquitectura de sistema sin DBMS está totalmente obsoleta desde
hace varias décadas.

Lo peor de este tipo de artículos y presentaciones es que son como
virus y sirven de alimento para crear nuevos artículos basura.

A partir de unas cuantas tonterías escritas por alguien que no sabe lo
que dice pueden aparecer montañas de publicaciones basura como esta.

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.



Entonces ¿la lógica del negocio la implementas en SGBD por medio de
triggers, prodedure,funcion, etc?



Si, aunque la mejor forma de implementar la lógica de negocio es
mediante código declarativo. Por ejemplo con CREATE ASSERTION y CREATE
VIEW.

Los procedimientos almacenados (los triggers también son
procedimientos almacenados) solo deben de usarse como última opción.

Pero al poner toda la lógica de negocio en el SGBD no te estas "amarrando" a
esta; que sucede si se quiere cambiar de SGBD.



¿Por que ibas a querer cambiar de SGBD?

Implementar la lógica de negocio en la aplicación da problemas
muchísimo mayores que este.

Por otra parte es muchísimo más frecuente cambiar de lenguaje de
programación e incluso de sistema operativo que cambiar de SGBD, y
entonces cuanta más lógica tengamos fuera de las aplicaciones mucho
mejor. Pero esto es una de las ventajas menos importantes que ofrecen
los SGBD.

Según mi opninión, si toda la logica de negocio la implementas en un
servidor de aplicaciones donde residen estos componentes de negocio y acceso
a datos (siempre usando el estandar SQl), creo que sería más flexible o me
equivoco.



Lo que pasa es que un servidor de aplicaciones es un SGBD muy
primitivo que utiliza un SGBD SQL (mucho más avanzado pero también
defectuoso) como si fuese un procesador de archivos. Es como construir
una radio partiendo de una televisión.

Los servidores de aplicaciones son una idea muy mala y lo mejor es
mantenerse alejados de ellos. Mucha gente se está dando cuenta (a base
de llevarse tortazos), y cada vez se utilizan menos. Son solo una más
de las muchas malas ideas que se ponen de moda y se desvanecen a los
pocos años.

El mundo de la informática se parece mucho al de la moda. Hay que
ofrecer continuamente nuevos productos para seguir vendiendo, y si no
hay nada nuevo ni mejor que ofrecer pues se busca algo antiguo y peor
y se le cambia el nombre. Te puedo poner muchos ejemplos además de los
servidores de aplicaciones.

Con un poco de suerte se puede hacer mucho dinero antes de que la
gente se de cuenta de que no funciona bien. Además cuando no funcione
siempre se puede dar cualquier excusa esotérica y seguir engañando a
la gente otra temporada. Lo único que le importa a la industria es
vender, así que hay que tener mucho cuidado.

Bueno diras que hay más trafico de red entre servidores, pero se gana
flexibilidad. no dependes del SGBD.



No ganas nada, pasas a depender de algo mucho peor.

Bueno dices que metodología que uso es antigua, entonces porque Microsoft
la plantea.



Pues supongo que por que los empleados de Microsoft que entienden
sobre sistemas de bases de datos están en minoría, y los que escriben
en la MSDN son programadores normales y corrientes sin una buena
formación en teoría de sistemas de bases de datos.

Si lees un libro de algún verdadero experto en sistemas de bases de
datos verás cosas muy distintas.

Sin embargo Microsoft va (en parte) por el buen camino con C# 3.0

Échale un vistazo a COmega si puedes.

Lo del DataSet con el IDE no te refuto porque es muy rápido, pero al final
de cuentas queria diseñar algo más orientado a objetos (naturalmente
hablando)



¿Y en que consiste ser más orientado a objetos?

Lo que proponías es más costoso de desarrollar y de mantener y además
es más propenso a errores. Si ser más orientado a objetos consiste en
eso pues yo no quiero serlo :)

, porque los datasets suenan mucho a xml.



Pues no deberían. Lo que intentan imitar es a una base de datos
relacional (una cosa buena), pero desgraciadamente se quedan muy lejos
de conseguirlo.


Saludos
Respuesta Responder a este mensaje
#8 andy O
28/04/2005 - 16:20 | Informe spam
Bueno, si dices que los articulos de microsoft son una "basura".
¿Tienes artículos que hablen sobre tu metodología de trabajo?.

¿Por que ibas a querer cambiar de SGBD?


¿Qué pasa si es que se decide migrar de SQL Server a Oracle? entonces
tendrias que migrar todos los triggers, views, procedures,etc a Oracle.
En cambio si en los componentes de la capa de negocios se trabaja con el SQL
standard solo tendrias que cambiar las cadenas de conexion y listo.
¿o me equivoco?

Por otra parte no es más engorroso programar la logica del negocio en el
SGBD, ya que no ofrece la potencia de un lenguaje de programación tipo C#
java vb.

En realidad no me queda claro la metodología que me propones.
En donde entra a tallar el OOP.

A ver si entendí, supongamos que se va a insertar un usuario en la bd.
Como ya no existe la capa de reglas de negocio en un servidor de aplicaciones.
Entonces las reglas de negocio estan en SGBD mediante por ejemplo un
procedure que verifica si el usuario existe y cosas como esa.

La aplicacion que puede ser web o exe llama al procedimiento y le devuelve
un mensaje si se inserto al usuario correctamente, si no devuelve los
errores ?
Luego la App imprime los resultados.

En el caso de getClientes, por ejemplo la app llama al procedure y le
devuelve un Datasets con los datos de clientes.
De alli hago un databind a un datagrid, o se recorro el dataset dependiendo
del caso.

Espero que conteste para saber si voy por el buen camino.

Gracias de Nuevo.
Respuesta Responder a este mensaje
#9 Alfredo Novoa
28/04/2005 - 17:46 | Informe spam
On Thu, 28 Apr 2005 07:20:04 -0700, andy O
wrote:

Bueno, si dices que los articulos de microsoft son una "basura".



Lo que digo es que algunos empleados de Microsoft algunas veces
publican artículos basura, especialmente cuando tratan sobre temas
relacionados con bases de datos.

Esto le pasa a muchas más empresas, por supuesto.

¿Tienes artículos que hablen sobre tu metodología de trabajo?.



Lo que tengo son libros serios escritos por verdaderos expertos en la
materia.

Para aprender hay que acudir a fuentes serias y no fiarte de lo
primero que te encuentres en cualquier web.

¿Por que ibas a querer cambiar de SGBD?


¿Qué pasa si es que se decide migrar de SQL Server a Oracle?



Pues que tendrías que rehacer parte del trabajo, pero no debería ser
un gran esfuerzo por que la mayoría del código SQL sería compatible y
si tienes procedimientos almacenados en C# no sería muy dificil
pasarlos a Java.

entonces
tendrias que migrar todos los triggers, views, procedures,etc a Oracle.



Pues si, pero seguirías teniendo un sistema bien diseñado.

En cambio si en los componentes de la capa de negocios se trabaja con el SQL
standard solo tendrias que cambiar las cadenas de conexion y listo.
¿o me equivoco?



No, pero seguirías teniendo un sistema muy mal diseñado, muy dificil
de mantener y que te habría costado un montón de trabajo desarrollar.

Por otra parte no es más engorroso programar la logica del negocio en el
SGBD, ya que no ofrece la potencia de un lenguaje de programación tipo C#
java vb.



Es justo todo lo contrario, los SGBD ofrecen toda la potencia de
lenguajes de programación como C# y Java y además ofrecen toda la
potencia de SQL que es un lenguaje de mucho más alto nivel y orientado
a la lógica de negocio.

SQL está basado en la lógica de predicados de primer orden, es decir
es un lenguaje basado en la lógica matemática.

La gran aportación de Codd (el padre de las bases de datos modernas)
fue darse cuenta de que la lógica matemática podía utilizarse para la
lógica de negocio.

Usar la lógica para la lógica. ¿A que parece lógico? :)

Creo que deberías de leer algún buen libro de introducción a los
sistemas de bases de datos.

Aqui tienes el mejor, y además en español:

http://www.agapea.com/Introduccion-...11521i.htm

Para mi es una lectura totalmente imprescindible para todo el que
quiera trabajar con sistemas de bases de datos de forma seria.

En realidad no me queda claro la metodología que me propones.
En donde entra a tallar el OOP.



En la aplicación que es la responsable de la presentación y
comunicación con los usuarios.

La lógica de negocio le pertenece al SGBD.

En realidad hay poco espacio para la OOP en los sistemas de
información empresarial. Esto es algo bien conocido.

Si quieres aprender OOP, la peor forma posible sería intentando crear
un sistema de información empresarial.

A ver si entendí, supongamos que se va a insertar un usuario en la bd.
Como ya no existe la capa de reglas de negocio en un servidor de aplicaciones.



Ya no existe el servidor de aplicaciones.

Entonces las reglas de negocio estan en SGBD mediante por ejemplo un
procedure que verifica si el usuario existe y cosas como esa.



No, eso se comprueba mejor con una regla de integridad declarativa.
Algo que no se puede hacer con un servidor de aplicaciones.

En ese caso bastaría con declarar una clave primaria en la tabla de
usuarios. Mira que fácil :)

Como ya he dicho, los procedimientos solo deben de usarse como último
recurso. Es mucho mejor asegurar la integridad de los datos mediante
código declarativo: claves, aserciones, vistas, etc.

La aplicacion que puede ser web o exe llama al procedimiento y le devuelve
un mensaje si se inserto al usuario correctamente, si no devuelve los
errores ?
Luego la App imprime los resultados.



La aplicacion le hace una petición al SGBD (en SQL) y este devuelve un
mensaje de aceptación o de rechazo de la petición.

En el caso de getClientes, por ejemplo la app llama al procedure y le
devuelve un Datasets con los datos de clientes.
De alli hago un databind a un datagrid,



No, ya no necesitaríamos ningún getClientes, el código generado por el
IDE se encargaría de todo lo necesario para enlazar los datagrids con
las tablas de la base de datos.

o se recorro el dataset dependiendo
del caso.



Recorrer un dataset con un procedimiento no suele ser una buena idea.

¿Por que querrías hacerlo?

Lo pregunto por que seguramente habría formas mejores de conseguir lo
que tu quieres.


Saludos
Respuesta Responder a este mensaje
#10 andy O
28/04/2005 - 19:40 | Informe spam
Lo que tengo son libros serios escritos por verdaderos expertos en la
materia.



¿Qué libros recomiendas?


SQL está basado en la lógica de predicados de primer orden, es decir
es un lenguaje basado en la lógica matemática.




En eso tienes razón.

La gran aportación de Codd (el padre de las bases de datos modernas)
fue darse cuenta de que la lógica matemática podía utilizarse para la
lógica de negocio.

Usar la lógica para la lógica. ¿A que parece lógico? :)




También tiene de cierto y como dices hay muchos articulos "basura" que te
cambian la manera de pensar.
A mi al parecer me enseñaron mal, porque me decian que evite meter lógica en
SGBD. y en lugar de ello crear componentes de negocio. (COM+ y ejbeans) que
se encarga de ello.


Creo que deberías de leer algún buen libro de introducción a los
sistemas de bases de datos.




Derepente los libros y la teoria que he leido no era la edecuaday sólo
contemplaba la parte de manipulacion y recuperacion de la data.
Más no la parte logica empresarial.


Si quieres aprender OOP, la peor forma posible sería intentando crear
un sistema de información empresarial.



Entonces¿ cuando aplico OOP?, dices que en la parte de la presentación,
entonces y las clases entidades ¿Para qué estan?

>Entonces las reglas de negocio estan en SGBD mediante por ejemplo un
>procedure que verifica si el usuario existe y cosas como esa.

No, eso se comprueba mejor con una regla de integridad declarativa.
Algo que no se puede hacer con un servidor de aplicaciones.

En ese caso bastaría con declarar una clave primaria en la tabla de
usuarios. Mira que fácil :)



Eso es obvio el PK verfica eso, pero yo digo cosas como por decir claro, que
el nick del usuario no empiece con [`+¡'] ya se, esto se maneja con check
constraints.
Pero si queremos algo complicado como que el usuario no debe estar en la
tabla A, B,C,
que el ranking del usuario no superes el mayor numero de ranking del usuario
que tiene la mayor puntuacion en su categoria. (Cosas complicadas, lo que he
escrito suena a confusion y no tiene sentido lógico, pero es un ejemplo)

¿usamos procedimientos acaso?

No, ya no necesitaríamos ningún getClientes, el código generado por el
IDE se encargaría de todo lo necesario para enlazar los datagrids con
las tablas de la base de datos.



¿Entonces me dices que todo lo haga el asistente? y la parte de la
presentación seria la unica tarea no? cosas como la fecha debe estar en en
formato x, la moneda en y. cosas así?.
Que sucede cuando por ejemplo en una web de comercio electronico queremos q
cuando un producto esta fuera del stock sale en color rojo. ¿Cómo hacerlo con
el datagrid?
A demás dicen que el datagrid es malo en rendimiento.
o por ejemplo en una tabla de productos que tienen una imagen entonces se
llama a otra pagina aspx que te devuelve miniaturas y le pasas como
querystring el codigo y otros parametros y te devuelve la imagen en miniatura.
¿no es más engorrozo en el datagrid?



Recorrer un dataset con un procedimiento no suele ser una buena idea.
¿Por que querrías hacerlo?
Lo pregunto por que seguramente habría formas mejores de conseguir lo


que tu quieres.




Te pregunto porque a veces el datagrid, es muy rígido y a veces por diseño
necesitamos hacer algunas operaciones que requieran manejar el dataset como
un registro total.
Y de esta manera realizar algunas operaciones recorriendo 1 a 1.

Un ejemplo tengo una tabla de registro con 3 campos: id, descripcion, fecha.

10 Des1 19/04/2005
9 Des2 19/04/2005
8 Des3 19/04/2005
7 Des4 19/03/2005
6 Des4 19/02/2005
4 Des4 19/05/2004
3 Des4 19/05/2005
2 Des4 19/04/2004
1 Des4 19/04/2004

y te piden que lo presentes en este formato

Año XXX

Mes XXX
DEs1
DEs2
DEs3

Año XXXX

MES XXX

DEs3
DEs4
DEs5

En este caso tenía que presentar este reporte desde la Web

Lo que hago yo es una consultar a la tabla logs ordenarla por fecha
E ir recorriendo secuencialmente la coleccion de objetos logs e ir
pregunando si son del mismo mes o año.

¿Cómo lo harías?

Diras que estoy mencionando muchos ejemplo de tipo de aplicaciones cliente
web, pero es donde más se aplica estas situaciones donde hacer el diseño es
tedioso.

Bueno, gracias de nuevo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida