Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-05-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Datasnap, separando logica de acceso a datos

Que tal club, resulta que es la primera vez que me encamino en algo "serio" con Datasnap, estoy algo confundido

A grandes rasgos, esta seria mas o menos la forma de trabajar que venia usando hasta ahora:

Para cada objeto del dominio del negocio, encapsulaba toda la logica en una unit especifica para el, por ejemplo:

Código Delphi [-]
unit Productos;

interface

type
  TProducto = class
  public
    Id: int64;
    Descripcion: string;
    // bla bla mas campos
    function Guardar: boolean;
    class function Obtener(const Id: int64): TProducto;
  end

implementation

uses 
  UDataModule;

function TProducto.Guardar: boolean;
begin
  if Id = 0 then
    Result := DataModule.ProductMgr.Nuevo(Self)
  else
    Result := DataModule.ProductMgr.Actualizar(Self);
end;

class function TProducto.Obtener(const Id: int64): TProducto;
begin
  Result := DataModule.ProductMgr.Obtener(Id)
end;

Y ademas tambien generaba una unit especifica para controlar el acceso a datos, por ej:

Código Delphi [-]
unit ProductoMgr;

interface

type
  TProductoMgr = class
  public
    constructor Create(AConnection: TADOConnection);
    function Nuevo(const Producto: TProducto): boolean
    function Actualizar(const Producto: TProducto): boolean;
    function Obtener(const Id: int64): TProducto;
    function Buscar(const Descripcion: string): TDataSet;
  end;

Y luego en el clasico DataModule tenia que declarar en la seccion publica una instancia de cada uno de esos Mgr. En el evento AfterConnect de la Conexion los construia pasandoles como argumento la propia conexion

Bueno, ya se imaginan como funciona, es muy sencillo

Desde el cliente podria hacer cosas como

Código Delphi [-]
var 
  p: TProducto;
  IdRetornado: int64;
begin
  p := TProducto.Create;
  try
    p.Descripcion := 'Mi Producto';
    if p.Guardar then
    begin
      IdRetornado := p.Id;
      ShowMessage('Guardado correctamente'); 
    end else
      ShowMessage('Error');
  finally
    p.Free;
  end;
  
  p := TProducto.Obtener(IdRetornado);
  try
    ShowMessage(p.Descripcion); // 'Mi Producto'
  finally
    p.Free;
  end;
end;

Ahora bien, en datasnap es distinto. Entiendo las limitantes de que no puedo retornar directamente un objeto como mi TProducto, para eso deberia usar Json por ejemplo, esa no es mi duda

Lo que realmente quiero hacer es seguir con la idea de encapsular cada objeto en su unit especifica, pero datasnap requiere que publique cada metodo que los clientes van a invocar en el TServerMethods. Solamente quiero mantender "la casa en orden" y no tener en una sola unit (la del TServerMethods) todos los metodos y funciones que puedo invocar, mas bien me gustaria tener todo separadito y ordenadito en su lugar, me explico?

Existe alguna forma de hacer esto o hay que llenar una sola unit con todos los metodos?

Saludos
Responder Con Cita
 



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
Dudas DataSnap y acceso a base de datos desde App Android RedVenom Conexión con bases de datos 2 29-04-2015 17:59:12
Crear Web Service con Acceso a Servidor DataSnap cmfab Varios 0 23-01-2015 16:53:46
Acceso desde un servicio Android a un servidor DataSnap birmain Desarrollo en Delphi para Android 2 20-11-2014 03:06:12
Pasar estructura de datos en DataSnap giulichajari Internet 0 19-10-2014 11:57:28
problema con logica de programacion en delphi y base de datos chelox OOP 6 05-10-2007 17:49:33


La franja horaria es GMT +2. Ahora son las 11:56:08.


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