DBHelpers
DBHelpers é a minha unit de class helpers para TField e TDataSet. Você pode fazer o download do código fonte de dbhelpers.zip.
Class helper é um novo recurso da linguagem Delphi (salvo engano, disponível a partir do BDS2006) para estender a funcionalidade de uma classe existente com novos métodos ou propriedades.
Diferente do uso de herança, ao invés de criar uma classe descendente você declara um tipo “class helper for (AClass)”, onde AClass é a classe que você quer estender. O compilador entende que os seus métodos são válidos no escopo da classe associada (AClass) e de seus descendentes. Por exemplo, os métodos de TDataSetHelper podem ser usados como se pertencessem às classes TClientDataSet, TSQLDataSet ou qualquer outro desdente de TDataSet.
Um class helper não tem dados, mas pode acessar todos os campos, propriedades e métodos protegidos ou públicos da classe associada. É a versão “limpinha” do hack de fazer um typecast forçado de uma classe para outra classe descendente local. Em outras palavras, escrever um class helper é como legalizar na Prefeitura o “puxadinho” que você queria construir sobre a laje do barraco.
Essa é a interface da versão inicial de DBHelpers, que tem vários métodos úteis para uso em aplicações clientes (TDataSetHelper e TFieldHelper.AsStringTrim) e servidores DataSnap (CurrentValue, IsEmpty e OldIsNull de TFieldHelper) :
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | type TForEachRow = procedure (Sender: TDataSet; var Abort: Boolean) of object; TDataSetHelper = class helper for TDataSet public procedure DeleteAll; procedure ForEach(AMethod: TForEachRow; const AFilter: String = ''); procedure GetFieldValues(Strings: TStrings; Field: TField; Distinct: Boolean = True); overload; procedure GetFieldValues(Strings: TStrings; const FieldName: String; Distinct: Boolean = True); overload; procedure GetParamValues(Params: TParams); end; TFieldHelper = class helper for TField private function GetAsStringTrim: String; procedure SetAsStringTrim(const Value: String); function GetCurrentValue: Variant; procedure SetCurrentValue(const Value: Variant); public property AsStringTrim: String read GetAsStringTrim write SetAsStringTrim; property CurrentValue: Variant read GetCurrentValue write SetCurrentValue; function IsEmpty: Boolean; function OldIsNull: Boolean; end; |
Não tenho por enquanto mais documentação além do próprio código fonte, que é bem simples, mas sintam-se a vontade para perguntar se tiverem dúvidas.
Comments
One Response to “DBHelpers”
Deixe uma Resposta

Eh.. nao vi muita diferença na parte de acesso a propriedades e metodos publicos e protegidos, visto que toda classe que Herde de outra tambem tem acesso a estas variaveis.
Dava pra explicar melhor??