He leído con interés el blog de Nick Hodges en Why You Should Be Using Interfaces y como ya estoy enamorado de las interfaces en un nivel superior en mi codificación, decidí ver cómo podría extender esto bastante bajos niveles e investigar qué soporte para esto existía en las clases de VCL.Código contra una interfaz con TStrings y TStringList
Una construcción común que necesito es hacer algo sencillo con un TStringList, por ejemplo, el código para cargar una pequeña lista de archivos de texto en una cadena de texto coma:
var
MyList : TStrings;
sCommaText : string;
begin
MyList := TStringList.Create;
try
MyList.LoadFromFile('c:\temp\somefile.txt');
sCommaText := MyList.CommaText;
// ... do something with sCommaText.....
finally
MyList.Free;
end;
end;
parecería un buen simplificación si podría escribir con el uso de MyList como interfaz - sería deshacerse de la legibilidad try-finally y mejorar:
var
MyList : IStrings;
//^^^^^^^
sCommaText : string;
begin
MyList := TStringList.Create;
MyList.LoadFromFile('c:\temp\somefile.txt');
sCommaText := MyList.CommaText;
// ... do something with sCommaText.....
end;
no puedo ver un IStrings definen sin embargo - ciertamente no en Classes.pas, aunque hay referencias a él en relación con la programación OLE en línea. ¿Existe? ¿Es esto una simplificación válida? Estoy usando Delphi XE2.
Si quieres mi opinión: ¡no hagas eso! Del mismo modo que nunca utilizar interfaces no es una solución, el uso de interfaces para todo tampoco lo es. Incluso Nick afirma específicamente TStrings/TStringList para ser utilizado perfectamente como instancias de clase en su última publicación de blog. –
TStrings es "casi" una interfaz, es una clase abstracta que podría tener diferentes implementaciones. Siempre que sea posible, solo paso TStrings como tipo de parámetros, en lugar de TStringList. – mjn
Estoy de acuerdo con @UweRaabe. Las interfaces son poderosas y los principiantes hacen un uso indebido de herramientas poderosas. No use una referencia de interfaz en lugar de una referencia de objeto simplemente porque eso es posible. Recomiendo cumplir con el propósito original de las interfaces: abrir diseño extensible. – kludg