Esto es un patrón GoF Factory para pagos de un sistema POS, estoy si IDE en el bloc de notas del ipad.Disculpar si hay errores. Aquí puedo añadir nuevas clases o quitarlas. Por ejemplo si tienes TComparar2025_26 puedes añadir TComparar2026_27, de esta forma la UI, la vista o el form no accede a datos directamente, separas responsabilidades y es fácil de mantener y escalar. Yo suelo usar patrones para separar responsabilidades. Puedes crear diccionario<TTipoconsulta, funcion: boolean> y luego con un ejecutor ejecutar consultas : Ejecutar(TTipoconsulta.compararanos) por ejemplo. El objeto es que al separar responsabilidades puedas escalar y mantener el desarrollo sin refsctorizados pesados. Te dejo un ejemplo de Factory.
Código Delphi
[-] Unit tpv.factory.pagos;
Interface
Uses tpv.clases.tticket,
Tpv.enums;
Type
IMetodoPago = interface
[GUID]
Procedure ProcesarPago(ATicket:TTicket);
End;
TEfectivo = Class(TinterfacesObject,IMetodoPago)
Private
FTotal:double;
Public
Procedure ProcesarPago(ATicket:TTicket);
End;
TTarjeta = class(TinterfscedObject, IMetodoPago)
Private
Ftotal:double
Public
Procedure ProcesarPago(ATicket:TTicket);
End;
TBizum = class(TInterfacedObject, IMetodoPago)
Private
FTotal:double;
Public
Procedure ProcesarPago(ATicket:TTicket);
End;
TPagoTicket = class
Private
Public
Class function ObtenerMetodoPago(AFormaPago:TFormaPago):IMetodoPago;
End;
Implementation
Class function TPagoTicket.ObtenerMetodoPago(
AFormaPago:TFormaPago):IMetodoPago;
Begin
Case AFormaPago of
mpEfectivo: Result := TEfectivo.Create;
mpTarjeta: Result := TTarjeta.Create;
mpBizum: Result := TBizum.Create;
end;
Procedure TEfectivo.ProcesarPago(ATicket:TTicket);
Begin
ATicket.Estado := etCerrado;
ATicket.MetodoPago := mpEfectivo;
End;
Procedure TTarjeta.ProcesarPago(ATicket:TTicket);
Begin
ATicket.Estado := etCerrado;
ATicket.MetodoPago := mpTarjeta;
End;
Procedure TBizum.ProcesarPago(ATicket:TTicket);
Being
ATicket.Estado := etCerrado;
ATicket.MetodoPago := mpBizum;
End;