Cita:
Empezado por doctorhd
Y de acuerdo a tu experiencia, que forma debería tomar la implementación para optimizar su funcionamiento...
|
No hablo por AL, pero este es un ejemplo muy tipico de la infección "classitis". Porque una cosa es como hacer esto tipo OO, y otra es darse cuenta que NO ES NECESARIO!
1- Estas usando un record como si fuera una clase
http://www.delphibasics.co.uk/Article.asp?Name=Records
2- Estas usando metodos y funciones & propiedades que no *aportan nada* que no te da un record gratis.
3- Generando mucho codigo para algo que se resuelve con 1 array, 2 record y un par de funciones.
Delphi no es Java! Puedes usar funciones, metodos y dejar de la lado la OO. Es un lenguaje "multi-paradigma", aunque obviamente esta mas enfocado al lado de la OO.
Te pongo un ejemplo:
Código Delphi
[-]
type TEnumTypeData = (tyNone,tyCurrency, tyBoolean, tyDate, tyDateTime, tyFloat, tyInteger, tyString, tyExpandString, tyTime, tyBinaryData);
TClaveValor = record
Clave: string;
ValueDefault:Variant;
Value:Variant;
Tipo: TEnumTypeData;
end;
TArrayClaveValor = TArray;
TConfigBDRegistro = record
public
TipoServer:TClaveValor;
NameServer:TClaveValor;
Ruta:TClaveValor;
ProComunicacion:TClaveValor;
VendorLib:TClaveValor;
ListCampos:TArrayClaveValor;
end;
function createClaveValor(clave:string;tipo:TEnumTypeData; value, ValueDefault:Variant): TClaveValor;
begin
result.Clave := clave;
end;
function createConfigBD(
nameServer, tipoServer, ruta, proComunicacion, VendorLib:TClaveValor;
ListCampos:TArrayClaveValor): TConfigBDRegistro;
begin
result.NameServer := nameServer;
end;
begin
try
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Nota lo siguiente:
- No necesitas hacer create de un record. Los record son tipos "Value" like un string. Por eso son mas livianos y eficientes en memoria
- Mucho codigo eliminado
- Centralizado en createXXXX todo el proceso, incluyendo las validaciones.
- Si tu Delphi soporta Generics, puedes usar TArray<> y te ganas un constuctor + todo lo que te dan las clases genericas, lo que te ahorra otra clase
Código Delphi
[-]
TArrayClaveValor.Create(TClaveValor1, TClaveValor2, TClaveValor3);
En resumen: Usa clases cuando necesites la funcionalidad de clases.