Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-04-2013
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Poder: 19
GerTorresM Va por buen camino
Creando una aplicaciones en tres (3) Capas

Hola a tod@s:

Bien en orden de ideas deseo poder pasar de crear aplicaciones de escritorio a generar aplicaciones cliente - servidor utilizando para los efectos un modelo en tres capas.

Vista - Interfaz de usuario
Lógica de Negocio - Valida de Datos que ingresan, procesamiento de los mismos y envió de peticiones al servidor
Capa de Datos - Conexión a la BD, Validación de datos procesados para almacenar y envió de conjuntos de datos.

En orden de datos lo anterior suena a retorica y a libro para principiante (en los cuales me cuento); de lo que he podido leer y buscando hacer algo sencillo pero practico, he encontrado que una opción es crear un servidor fuera de proceso; éste ya lo puede crear generando una aplicación para el efecto.

He creado una segunda aplicación con la vista del usuario y he logrado ver lo datos que provienen del cliente.

En orden de ideas eso me llevo buen tiempo pero funciono, ahora necesita saber como programo la capa del medio en la cual debe tener los procesos de la lógica; y en ese orden de ideas si debe realizar una tercera aplicación para generar esta capa, y como se conecta esta capa con la de datos y con la de vista.

Agradezco sus comentarios y su tiempo



Cordialmente



gertorresm
Responder Con Cita
  #2  
Antiguo 16-04-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Busca manuales (en el FTP del club puedes encontrar algunos) y revisa los temas sobre Datasnap. a ver si se acerca a lo que tienes en mente.

Siento no poder ser más concreto, pero es que la pregunta es muy amplia y algo confusa (para mi).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 16-04-2013
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
Cita:
Empezado por GerTorresM Ver Mensaje
Hola a tod@s:

Bien en orden de ideas deseo poder pasar de crear aplicaciones de escritorio a generar aplicaciones cliente - servidor utilizando para los efectos un modelo en tres capas.

Vista - Interfaz de usuario
Lógica de Negocio - Valida de Datos que ingresan, procesamiento de los mismos y envió de peticiones al servidor
Capa de Datos - Conexión a la BD, Validación de datos procesados para almacenar y envió de conjuntos de datos.
Un ejemplo muy bueno de ayuda es JEDI VCS, puedes bajarte los fuentes de http://jedivcs.sourceforge.net/build...om_source.html

es una aplicación en tres capas.

un saludo.
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
Responder Con Cita
  #4  
Antiguo 16-04-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por GerTorresM Ver Mensaje
Vista - Interfaz de usuario
Lógica de Negocio - Valida de Datos que ingresan, procesamiento de los mismos y envió de peticiones al servidor
Capa de Datos - Conexión a la BD, Validación de datos procesados para almacenar y envió de conjuntos de datos.
Lo que describes es independiente de la cantidad de aplicaciones que estes construyendo. Por ejemplo, en el desarrollo de apps moviles para iOS, se trabaja MVC todo el tiempo aun sin incorporar un BD o un servidor web (o sea, aun si la app es monolitica).

Hace tiempo cuando empece a hacer apps "3-niveles" perdia mucho tiempo al separarlas desde el inicio. Eso complica enormemente la depuracion y hacer los test de las mismas. Al final, si la app no necesita soportar una arquitectura escalable empaquetarla en 1 o maximo 2 programas no tiene *nada* de malo. De hecho, con un servidor de datos como postgres se puede contar con un app que es especializado en manejar datos y permite hacer programacion de forma muy flexible. Con eso, tenes un modelo 2 niveles muy potente si lo sabes aprovechar.

Piensa que es lo mas normal (y de hecho recomendado!) incluso para servicios como pinterest que arrancan de forma monolitica y luego se van "desacoplando" y distribuyendo.

Ahora lo que describes como se logra?

Es muy facil, realmente (de mi blog):

http://blog.elmalabarista.com/tagged/delphi
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 16-04-2013
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por Neftali Ver Mensaje
Busca manuales (en el FTP del club puedes encontrar algunos) y revisa los temas sobre Datasnap. a ver si se acerca a lo que tienes en mente.

Siento no poder ser más concreto, pero es que la pregunta es muy amplia y algo confusa (para mi).
también te recomiendo la serie de videos de Pawel Glowacki (Delphi Labs), que encuentras en su blog o en la pagina de embarcadero.

Como dice Neftalí la mejor opción es DataSnap, que es una arquitectura nativa en Delphi y que ha sido repotenciada en las últimas versiones XE,XE2, XE3...

Aunque a primera vista parezca que DataSnap es complejo, la verdad es que no lo es... Delphi se encarga del trabajo sucio y tu de lo que ya sabes.

Por otro lado, el tema de manejar las tres capas es un tema de organización y disciplina... no debes dejar que la premura te haga perder el foco de la arquitectura. Me refiero a que muchas veces nos domina nuestra costumbre de programar procedimentalmente y todo en una capa....

Te dejo un link de un hilo similar en este foro
Responder Con Cita
  #6  
Antiguo 06-09-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Estimados,
tengo una duda respecto a DataSnap... después de mucho leer y revisar videos, en los cuales siempre se desarrolla dos aplicaciones una servidor y otra cliente.
El punto es que ocurre cuando se distribuye la aplicación terminada? cual es el modelo?
Existe un servidor general, donde están montadas la base de dato, y además l aplicación servidor que hace las veces de conector entre la base de dato y el cliente final, esto es asi?
O en cada distribución se incluye una aplicación servidor y cliente, y estas en conjunto se conectan al servidor de las base de dato?

Esoy confundido, que se gana con esto, al tener una sola aplicación cliente con ventanas y todo eso, y sus respectivos DataModule con los conectores a la Base de dato... ?¿?¿

Estoy intentando profundizar en esto, ya que tengo una aplicación desarrollada en Delphi 2010, que se conecta a Firevird 2.5, pero ahora se quiere implementar en otras sucursales por medio de internet, manteniendo las bases de dato centralizadas.

Gracias
Responder Con Cita
  #7  
Antiguo 06-09-2013
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Dependiendo de la infraestructura y los modelos de seguridad que maneje tu empresa/cliente, puedes tener uno o dos servidores.

Lo más recomendable es tener dos servidores, uno es el servidor de apliaciones y el otro el de base de datos, ésto por temas de seguridad de tus datos, ya que el servidor de aplciaciones es el único que se expone directamente.

La idea con DataSanap, es que instales el programa Server, en el servidor de aplicaciones, via IIS (modelo ISAPI), o también puedes ponerlo a correr como un servicio de Windows, o como una aplicación ejecutada manualmente en dicho servidor.

Ésta aplicación Server será la encargada de hacer TODA la gestión de conexión con la base de datos y envío de datos al cliente...

Tu Servidor de base de datos, no se debe preocupar por las aplicaciones que la accesarán, asi que no importa si hablas de DataSnap u otra arquitectura... sencillamente es tu repositorio de datos.

Por último, tendremos la aplicación cliente, que será la que debes ir instalando y actualizando en cada cliente... ésta se comunica con tu aplicación Server haciendo petición de datos o cálculos, pero no pega directamente a la BD, aun cuando ésta esté ubicada en el mismo servidor...

Migrar tu aplicación tipo cliente servidor, donde tus datamodules se conectan directamente a la base de datos es un trabajo duro, pero no imposible, aunque depende del tamaño de tu aplicación y la organización que tengas de tu código... es un cambio de paradigma...

En cuanto al "despliegue", hay que tener en cuenta que el cliente debe poder actualizarse frecuentemente, para ésto es bueno implementar un sistema actualización en línea de tu software... No es muy diferente a lo que pasa con Web... solo que a ti te parece que no instalas nada, pero en realidad estas lidiando con actualizaciones permanentes del cliente (Internet Explorer, Chrome, Firefox) y de sus frameworks (.Net y Java, si cabe)

Un saludo,
Responder Con Cita
  #8  
Antiguo 06-09-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Gracias Gatosoft, por tu pronta respuesta.

Entonces lo ideal es tener dos servidores, sin embargo, se podría utilizar uno solo que contenga el servicio de la aplicación y las propias base de datos... todos los ejemplos que he revisado el cliente y servidor de aplicaciones están en el mismo equipo, como y con que componentes se conectaría el cliente con el servidor de aplicación por medio de internet o red local?
Algún ejemplo??

Como bien has dicho, no es un cambio menor traspasar mi aplicación a una de 3 capas, pero he tenido bastantes problemas de velocidad y principalmente desconección hacia la BD lo que provoca que la aplicación cliente se cuelgue... vale la pena hacer el esfuerzo y traspasar a este tipo de arquitectura? realmente mejorar la velocidad y principalmente el problema de que se cuelgue la aplicación?

Como ya estoy pensando en modificar mi aplicación, valdrá la pena pensar en otra tecnología? cual?
DataSnap es una buena opción considerando que en el futuro el proyecto completo involucra desarrollar algunas aplicaciones para Tablet y páginas web, es compatible esta tecnología con esto?

Hartas preguntas, espero me puedan ayudar a decidirme.
Gracias
Responder Con Cita
  #9  
Antiguo 06-09-2013
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por mjjj Ver Mensaje
Gracias Gatosoft, por tu pronta respuesta.

Entonces lo ideal es tener dos servidores, sin embargo, se podría utilizar uno solo que contenga el servicio de la aplicación y las propias base de datos... todos los ejemplos que he revisado el cliente y servidor de aplicaciones están en el mismo equipo,
Que el elservidor de aplciaciones y base de datos esten en el mismo equipo no es problema, es solo una estrategia de seguridad que ha sido norma en las empresas en las que trabajo (Sector Financiero), lo importante es que si utilizas DataSnap no acceses directamente a la base de datos desde tu aplicación cliente porque ahí comeinzan los problemas....

Lo importante de DataSanap es que puedes accesar a tu aplicación ya sea desde una red local o a través de internet, y ésto te servirá cuando comiences a proramar para tabletas.

Cita:
Empezado por mjjj Ver Mensaje
como y con que componentes se conectaría el cliente con el servidor de aplicación por medio de internet o red local?
Algún ejemplo??
Hay que tener presente que tu servidor datasanap, expone servicios a través de unas clases y tu cliente los consume a través de un "Datamodule" que el wizard te ayuda a cosntruir...

Para el caso específico de las consultas, Datasnap provee comoponentes homologos TDBXXonetion, TDSDatasetProvider, entre otros, que puedes conectar a tus datassources, o ClientDatasets para trabajar...


Y personalmente utilizo una técnica en la que hago todas las conexiones y consultas en el servidor, y envio los resultados de consultas al cliente en forma de XML o a traves de TDBXReader...

No tengo un ejemplo a mano, pues no estoy en casa y en mi trabajo no tengo delphi... pero te recomiendo que sigas el blog de Andreano lanusse, donde da tips interesantes para trabajar el interambio de datos entre cliente y servidor... lo que considero es el Quid de ésta tecnología..!!

http://www.andreanolanusse.com/en/ca...tasnap-server/
http://www.andreanolanusse.com/en/da...iving-objects/

Cita:
Empezado por mjjj Ver Mensaje
Como bien has dicho, no es un cambio menor traspasar mi aplicación a una de 3 capas, pero he tenido bastantes problemas de velocidad y principalmente desconección hacia la BD lo que provoca que la aplicación cliente se cuelgue... vale la pena hacer el esfuerzo y traspasar a este tipo de arquitectura? realmente mejorar la velocidad y principalmente el problema de que se cuelgue la aplicación?
¿Vale la pena hacer el esfuerzo y migrar a DataSanap?, yo considero que si lo vale y bastante..!! no es cuestion de entrar en una moda, es cuestion de potencializar tu aplicación y darle una mayor proyección...

Como en todos los cambios de paradigmas, el trabajo mas fuerte estará en tu cabeza y en vencer éste sentimiento que te hace pensar que es mayor trabajo... y si valdrá la pena la inversión para lograr "un resultado similar"... Como te digo el resultado no es similar y el esfuerzo es relativo y proporcional a éste resultado...

Es posible que la velocidad mejore, pues los servidores están hechos para trabajo pesado... si trabajas tu servidor en la nube (Amazon, Azure) podrás calibrar la potencia de tu servidor de acuerdo a tus necesidades...(con el respectivo costo, obviamente)..

Mejorar la velocidad tambien va a depender de la lógica que utilices y de sobre todo de no cometer el error de programar web con filosofía cliente /servidor... por ejemplo bombardear el servidor con consultas full a las tablas d ela BD... (error hasta para cliente /servidor)

Cita:
Empezado por mjjj Ver Mensaje
Como ya estoy pensando en modificar mi aplicación, valdrá la pena pensar en otra tecnología? cual?
DataSnap es una buena opción considerando que en el futuro el proyecto completo involucra desarrollar algunas aplicaciones para Tablet y páginas web, es compatible esta tecnología con esto?
Hartas preguntas, espero me puedan ayudar a decidirme.
Gracias
¿Otra tecnología?, puede ser, eso depende de cuanto código quieras salvar de tu aplciación actual, de cuales herramientas y tecnologías manejes... No soy quien para recomendarte una tecnología específica, pues soy un enamorado de Delphi y soy se que mi opinión puede ser bastante sesgada...

DataSnap es compatible (ahora) con dispositivos móviles, y con Web podrías utilizar tu servidor consumiendo tus métodos a tarvés de servicios SOAP/REST... Delphi permite crear servicios SOAP/REST de una forma similar a como trabaja con DataSanap Puro....
Responder Con Cita
  #10  
Antiguo 07-09-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Voy a probar algunas funciones para revisar como funciona.

Algunas preguntas:

- Que tipo de Metodos debería utilizar para el servidor... TDataModule y TDSServerModule... considerando que necesitaré visualizer tablas completas, ejecutar algunos query especificos y procedimientos almacenados. cual es la diferencia es esto?
- Como llamo a un procedimeinto almacenado desde el cliente? que componente necesito, sirve el TClientDataSet ?
- Cuales son los componentes que debo utilizar en el cliente para llamar a los distintos metodos definidos en el servidor, respecto a BD?
- Como puedo conectar dos TclientDataSet para mostrar una consulta master-detail... con los componenetes Interbase utilizo la propiedad DataSource para conectarlos, se puedo hacer lo mismo con TClientDataSet, o debo utilizar otros componentes?

Espero me puedan ayudar a despejar dudas.
Gracias
Responder Con Cita
  #11  
Antiguo 09-09-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Alguna idea sobre mis ultimas preguntas, he intentado casi de todo, pero no me resulta !!

Salu2
Responder Con Cita
  #12  
Antiguo 09-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
mjjj,

Cita:
Empezado por mjjj
...después de mucho leer y revisar vídeos...

...Alguna idea sobre mis ultimas preguntas...
¿Haz revisado estos links?:
Cita:
DataSnap Overview and Architecture : http://docwiki.embarcadero.com/RADSt...d_Architecture

Desarrollo de aplicaciones DataSnap
: http://multicapasdatasnap.blogspot.c...-datasnap.html

Unleash the power of Delphi with Delphi Labs - DataSnap
: http://www.embarcadero.com/rad-in-action/delphi-labs
Espero sea útil

Nelson.
Responder Con Cita
  #13  
Antiguo 09-09-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Gracias Nelson, despejé varias dudas, sin embargo, aún tengo un problema con los peocedimientos almacenadas.

Entiendo que puedo llamar a una función previamente definida en el servidor, y que esta función me ejecute un procedimiento almacenado, y finalmente la función me devuelva un valor.
Sin embargo, lo que necesito es como llamar a un procedimiento almacenado que tenga por ejemplo 2 variables de entrada, que me devuelve mas de un registro y varios campos, y mostrarlos estos en un TDBGrid.

Espero me puedan ayudar.
MJJ
Responder Con Cita
  #14  
Antiguo 10-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
mjjj,

Cita:
Empezado por mjjj
...tengo un problema con los Procedimientos Almacenados...
¿Haz revisado estos links?:
Cita:
Querys en DataSnap : http://www.delphiaccess.com/forum/da...s-en-datasnap/

Creating the Server Side with DataSnap Server (InterBase Tutorial) : http://docwiki.embarcadero.com/RADSt...se_Tutorial%29

Delphi 2010 DataSnap : http://www.embt.cz/data/wysiwyg/file...p_Examples.pdf

DataSnap Development : ftp://po.istu.ru/public/docs/other/_.../chapter21.pdf
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 10-09-2013 a las 08:05:24.
Responder Con Cita
  #15  
Antiguo 23-09-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Estimados,
he estado averiguando el tema y resolviendo algunas dudas, sin embargo, aún me surgen otras.

- Un formulario que muestra por ejemplo, una orden de compra, dicha información está almacenada en mas de una tabla (proveedor, compras, compras_detalle, usuarios, etc.). que se recomienda, utilizar una sola función que me devuelva todo los registros que necesito, o varias funciones todas llamadas desde el cliente ?

- Antiguamente en un esquema cliente-servidor, utilizaba TIBQuery en un estructura master-detail, teniéndolos conectados por en la propiedad datasource del detalle, con el TDataSource del master, podré utuilizar esta misma forma con los TClientDataSet ? (el parámetro SQL de la consulta detalle, es un resultado de la consulta maestra). Esto lo resolví ejecutando una consulta en el evento AfterScroll del TClienteDataSet maestro, es una buena forma realizarlo así ?

- En caso de perdida de la conección del cliente al servidor DataSnap, como puedo recuperar la conección sin que me arroje algún error ? esto está asociado a la segunda pregunta, ya que el TclientDataSet maestro está cargado en el cliente no arroja ningún problema, pero al navegar se ejecuta el evento ONAfterScroll, y me arroja un error... Como resolvería esto?

Espero me puedan ayudar con mis dudas.
Gracias
Responder Con Cita
  #16  
Antiguo 16-11-2015
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Estimados, nuevamente yo por estos lados intentado retomar este tema dejado hace bastante tiempo...
Estoy haciendo pruebas para conectarme a un servidor Datasnap desde una aplicación de escritorio, pero tengo un problema, todo marcha bien, pero todo falla cuando pierdo la conección (sin darme cuenta) e intento ejecutar la petición al servidor el cual me arroja un error.

Código Delphi [-]
var myServer : TDSEmpresaClient;
begin
try
mistareas.close;

myServer := TDSEmpresaClient.Create(form1.SQLConnection1.DBXConnection);
myServer.mis_tareas(strtoint(Edit1.Text));
myServer.Free;

mistareas.Open;

except
try
sqlconnection1.Close;
sqlconnection1.Open;

finally
  TrayIcon1.BalloonHint := 'Problema de red.'+#13+ 'Intentando conección...';

  TrayIcon1.Animate := True;
  TrayIcon1.ShowBalloonHint;

end;
end;

donde mistareas es un TclientDataSet y mis_tareas es un procedimiento expuesto por el servidor datasnap que consulta con una TIBquery a una base de dato firebird 2.5.
El IBQuery del servidor está conectado a un TDataSetProvinder, al cual se puede acceder desde el cliente en código adjunto.

Intentando replicar el problema de los usuarios, es que desconecto el cable de red y llamo al procedimiento, observando como la aplicación de cuelga y me arroja un error... Socket Error #11001. Host not found.
Esta bien llamar a los procedimientos de esta manera... como evito que la aplicación se cuelge o por último que no me arroje este error, y manejarlo como yo quiera??

Ayuda por favor.
Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Reconectar en Tres Capas teletranx Conexión con bases de datos 0 05-09-2007 00:36:13
Programacion En Tres Capas OMARS Internet 2 08-08-2007 10:37:16
Tres capas rastafarey Firebird e Interbase 4 07-07-2004 13:30:31
Programando en objetos en tres capas quali OOP 2 21-02-2004 14:00:10
Aplicaciones de Tres Capas muli Varios 1 10-01-2004 15:06:08


La franja horaria es GMT +2. Ahora son las 00:12:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi