Las famosas n capas.

11/04/2005 - 11:13 por manolo | Informe spam
Hola,

¿Alguien tiene algún enlace en el cual se expliquen las aplicaciones en
n capas?
Yo estoy interesado en las de 3 capas, ya que estoy muy liado, me
confundo sobre todo entre que poner en la capa de datos y en la capa de
negocio. La capa superior está más bien clara, ya que es la más fácil de
implementar.

Muchas gracias y un saludo.

Preguntas similare

Leer las respuestas

#16 Alfredo Novoa
12/04/2005 - 17:59 | Informe spam
On Tue, 12 Apr 2005 12:05:09 -0300, "Eduardo A. Morcillo [MS MVP VB]"
<emorcillo .AT. mvps.org> wrote:

Yo veo que vas por buen camino.

- Vistas que devuelven los datos de varias tablas.



Ojo, usa vistas solo si vas a utilizar TODAS las filas. Las vistas devuelven
todos los registros y si luego los vas a filtrar con un WHERE pierdes
rendimiento.



¿Estás seguro de esto?

Supongo que estás hablando de SQL Server, por que con Oracle y DB2,
esto no pasa ni de coña, pero extrañaría muchísimo que SQL Server esté
tan mal hecho, vamos que no me lo creo.

Cuando haces una restricción de una vista con restricción lo que hace
el SGBD es combinar las restricciones.

Por ejemplo si tienes una vista de ventas de tomates:

create view VentasTomates as select ventas where articulo = 'Tomate'

Y quieres restringirla para saber cuantos tomates has vendido en
Madrid

select VentasTomates where Ciudad = 'Madrid'

La consulta que realmente se va a ejecutar es la siguiente:

select ventas where articulo = 'Tomate' and ciudad = 'Madrid'

En principio el rendimiento debería de ser prácticamente el mismo, a
menos que los desarrolladores del SGBD sean unos ineptos totales, y no
creo que sea el caso.


Saludos
Respuesta Responder a este mensaje
#17 Eduardo A. Morcillo [MS MVP VB]
12/04/2005 - 19:37 | Informe spam
En esto tienes razon! No se en que habre estado pensando.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
Respuesta Responder a este mensaje
#18 Eduardo A. Morcillo [MS MVP VB]
12/04/2005 - 20:05 | Informe spam
Vamos a ponernos de acuerdo en algo. Al parecer tu llamas base de datos a
los archivos fisicos en donde se guarda la informacion y SGBD al programa
que los accede y devuelve a la aplicacion ¿No? Bueno, generalmente a ese
SGBD se le dice base de datos (este bien o mal, es de uso comun), entoces
cuando yo digo que debes tener algo entre la BD y la capa de negocio, digo
que debes tener algo entre el SGBD y la capa de negocio. A eso se le llama
capa de acceso a datos.

El SGBD proporciona toda la abstracción necesaria
sobre la base de datos.



¿Seguro? Mas abstraccion es llamar a un metodo "ObtenerClientes" que hacer
un "SELECT * FROM Clientes". Por supuesto que en la capa de acceso a datos
deberas hacer el SELECT, pero al combinar esta capa con las entidades de
negocio el resto de las capas quedan totalmente independientes de nombres de
tablas o campos y del SGBD usado o lo que sea que mantiene los datos.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
Respuesta Responder a este mensaje
#19 Eduardo A. Morcillo [MS MVP VB]
12/04/2005 - 20:15 | Informe spam
Esto también se lo he explicado a Carlos. Eso lo solucionas usando
vistas o usando la instrucción Prepare desde las aplicaciones.



Prepare tiene sentido solo si usas el comando en un bucle o varias veces
seguidas. No tiene sentido forzar la compilacion del comando cada vez que se
ejecuta si se va a compilar de todos modos al ejecutarse ¿no?

Es todo lo contrario, es muchísimo más complicado. Los mecanismos de
seguridad de los SGBD están precisamente para resolver estas cosas, y
no los procedimientos almacenados.



Los procedimientos almacenados no estan para resolver problemas de
seguridad, nadie ha dicho eso. Pero si facilitan la administracion de
seguridad.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
Respuesta Responder a este mensaje
#20 Alfredo Novoa
12/04/2005 - 21:02 | Informe spam
On Tue, 12 Apr 2005 15:05:55 -0300, "Eduardo A. Morcillo [MS MVP VB]"
<emorcillo .AT. mvps.org> wrote:

Vamos a ponernos de acuerdo en algo. Al parecer tu llamas base de datos a
los archivos fisicos en donde se guarda la informacion



Siendo más correctos una base de datos es un conjunto organizado de
datos.

y SGBD al programa
que los accede y devuelve a la aplicacion ¿No?



SGBD significa: Sistema de Gestión de Bases de Datos.

Es un conjunto de aplicaciones especializadas destinado y diseñado
para gestionar bases de datos.

Bueno, generalmente a ese
SGBD se le dice base de datos (este bien o mal, es de uso comun)



Está claramente mal. Podría ser aceptable en los casos en los que no
hubiese lugar para la confusión. Por ejemplo si tienes al tu lado un
reproductor de DVD y ningún DVD te podría decir: "pásame el DVD" sin
riesgo de confusión. Pero si tienes un DVD al lado del reproductor de
DVD lo normal es que me pasases el DVD y no el reproductor.

El hecho es que mucha gente confunde las dos cosas (BD y SGBD)
continuamente. Este es el peligro de usar el mismo término para dos
cosas distintas.

El problema es que son dos conceptos abstractos, y por eso son mucho
más faciles de confundir, por que nadie confunde un DVD con un
reproductor de DVD dentro de su cabeza.

, entoces
cuando yo digo que debes tener algo entre la BD y la capa de negocio, digo
que debes tener algo entre el SGBD y la capa de negocio. A eso se le llama
capa de acceso a datos.



Ves, ya te estás confundiendo otra vez. La capa de negocio es el SGBD
y está entre las aplicaciones y la base de datos (el conjunto de
datos).

Esta confusión lleva a mucha gente a montar dos capas de negocio una
por encima de la otra.

Aplicaciones <--> Capa de negocio casera <--> Capa de negocio
industrial (SGBD) <--> Base de datos (conjunto de datos)

La capa de negocio casera sobra y empeora mucho las cosas.

El SGBD proporciona toda la abstracción necesaria
sobre la base de datos.



¿Seguro? Mas abstraccion es llamar a un metodo "ObtenerClientes" que hacer
un "SELECT * FROM Clientes".



Mucha más. Cuando escribimos "SELECT * FROM Clientes" sabemos
perfectamente lo que estamos pidiendo. Es una instrucción de alto
nivel y es un pequeño programa completo y ejecutable.

Cuando decimos ObtenerClientes() estamos haciendo una simple llamada a
una función que hay que implementar por otro lado. Es decir, de
momento no estamos resolviendo nada. Es un código de mucho más bajo
nivel (procedimental) y no es una solución completa como en el otro
caso.

Por supuesto que en la capa de acceso a datos
deberas hacer el SELECT, pero al combinar esta capa con las entidades de
negocio el resto de las capas quedan totalmente independientes de nombres de
tablas o campos y del SGBD usado o lo que sea que mantiene los datos.



Pero ¿Cuál es el sentido de abstraer con código casero una capa de
abstracción de calidad industrial específicamente diseñada para
abstraer Bases de Datos (conjuntos de datos)?

La respuesta es: la confusión entre Base de Datos y SGBD.

Piensas que el SGBD es una base de datos y por lo tanto que hay que
encapsularlo, pero resulta que el SGBD no es una Base de Datos si no
que ya es una capa que abstrae la Base de Datos, por lo que no hay que
volver a encapsularlo.

Quieres volver a hacer en casa lo que ya está hecho de forma
industrial. Es decir, reinventar la rueda, pero una rueda poco redonda
construida con los materiales que encuentras a mano, y lo peor es que
pretendes usarla para envolver a una rueda de verdad.


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