Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Aquí va mi idea más desarrollada:

Partiremos de una clase TPendiente (si quieren llamarla TAviso está bien ) que represente un pendiente:

Código Delphi [-]
TPendiente = class
private
  FFuente: String;
  FDescripcion: String;

public
  property Fuente: String read FFuente write FFuente;
  property Descripcion: String read FDescripcion write FDescripcion;
end;

Fuente sería el nombre de la entidad que genera el pendiente o aviso y Descripcion sería la descripción del pendiente. Obviamente la estructura real de esta clase dependerá de lo que se quiera publicar.

Luego tenemos la interfaz que publica mensajes

Código Delphi [-]
IPublicadorPendientes = interface
['{B34CC894-1ED9-4968-BE00-09D48676F734}']
  procedure getListaPendientes(Lista: TList);
end;

Lo que está entre corchetes es el GUID (global unique identifier) de la interfaz y es necesario declararlo (Ctrl+Shift+G) para poder moldear una interfaz con el operador as.

getListaPendientes deberá llenar la lista que se le pasa como parámetro con los pendientes que haya.

Después tenemos el gestor de pendientes:

Código Delphi [-]
TGestorPendientes = class
private
  FPublicadores: TInterfaceList;

public
  constructor Create;
  destructor Destroy; override;

  procedure RegistrarPublicador(Publicador: IPublicadorPendientes);
  procedure EnumerarPendientes(Publicar: TPublicarPendiente);
end;

Este gestor mantiene una lista interna de las entidades que se registren para publicar pendientes. Obsérvese que es una lista de interfaces, no de clases. Dicha lista se crearía en el constructor Create y se destruiría en el destructor.

Un entidad que quiera publicar pendientes se registra con el método RegistrarPublicador, quien simplemente añade la entidad a la lista interna.

El método EnumerarPendientes es el encargado de recorrer todos los pendientes de todas las entidades registradas. Pero este método no publica el pendiente, ya que esto es materia de la parte visual de la aplicación, que decidirá si pone el pendiente en un ListView, en un Memo, o lo manda por correo, o cualquier cosa que quiera hacer con el pendiente.

Para ello, al método se le pasa como parámetro un procedimiento, que será el encargado de publicar el pendiente. El tipo TPublicarPendiente se define asi:

Código Delphi [-]
TPublicarPendiente = procedure(Pendiente: TPendiente) of object;

Así, por ejemplo, el formulario principal puede declarar un método

Código Delphi [-]
TMainForm = class(TForm)
private
  procedure PublicarPendiente(Pendiente: TPendiente);
end;

que pondrá el pendiente en el control visual que desee. Cuando se requiera listar los pendientes se llamará al gestor:

Código Delphi [-]
GestorPendientes.EnumerarPendientes(PublicarPendiente);

El método EnumerarPendientes podría implementarse así:

Código Delphi [-]
procedure TGestorPendientes.EnumerarPendientes(Publicar: TProcesarPendiente);
var
  Pendientes: TList;
  I, J: Integer;

begin
  Pendientes := TList.Create;

  try
    // Recorrer la lista de publicadores
    for I := 0 to FPublicadores.Count - 1 do
    begin
      // Obtener la lista de endientes de este publicador
      (FPublicadores[i] as IPublicadorPendientes).getListaPendientes(Pendientes);

      // Publicar cada pendiente de este publicador
      for J := 0 to Pendientes.Count - 1 do
      begin
        Publicar(TPendiente(Pendientes[J]));
      end;
    end;
  finally
    Pendientes.Free
  end;
end;

Como dije antes, EnumerarPendientes simplemente recorre la lista de pendientes más no hace nada con ellos excepto llamar al método que se le pasa como parámetro.

Esto nos permite usar distintos métodos según sea el caso. Por ejemplo, además del método PublicarPendiente del formulario principal, podríamos tener un EnviarPendiente, que se encargue de mandar el pendiente por correo, de manera que

Código Delphi [-]
GestorPendientes.EnumerarPendientes(EnviarPendiente);

tendría el efecto de enviar por correo la lista de pendientes.

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Discusión sobre Patrones de diseño Delphius OOP 3 31-05-2008 20:38:03
Agenda con Avisos luxus Conexión con bases de datos 5 11-12-2007 22:23:38
Avisos parroquiales jam Humor 3 07-04-2006 09:15:31
Capturar Errores y/o avisos sergio_015 Varios 5 11-02-2004 06:06:35
lista de discusion allende Varios 2 03-12-2003 20:21:19


La franja horaria es GMT +2. Ahora son las 22:45:23.


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