|
Software Development Kit to the Delphi-Win32 and Free Pascal compilers |
| Home > Wiki > br/Classes de negócio |
br/Classes de negócioenglish (en) | português (br) Classes de negócio devem ser descendentes da classe TPressObject. Seus atributos são registrados através de seu metadata, veja Metadata para mais informações sobre metadata de classes. Se precisar de referencia para um atributo, em outros pontos do código, poderá criar ponteiros de atributos. Mesmo não sendo necessários, visto que se pode usar o método AttributeByName, os ponteiros proporcionam uma forma mais rápida e menos propensa a erros, de acesso aos atributos.
[edit] Criando ponteiros de atributosHá duas maneiras de criar um ponteiro de atributo dentro da classe de negócio. A primeira é criar o atributo na seção inicial, sem nome, da classe, adicionando um underscore "_" antes do nome. Como o TPressObject é descendente de TPersistent, ele tem RTTI habilitado, então a seção inicial da classe é do tipo published. TClient = class(TPressObject) _Name: TPressString; protected class function InternalMetadataStr: string; override; end; Um atributo chamado "Name", do tipo String, será acessado pelo membro _Name, nas instâncias da classe TClient. A segunda maneira é:
TClient = class(TPressObject)
private
FName: TPressString;
protected
function InternalAttributeAddress(const AAttributeName: string):
PPressAttribute; override;
class function InternalMetadataStr: string; override;
end;
...
function TClient.InternalAttributeAddress(const AAttributeName: string):
PPressAttribute;
begin
if SameText(AAttributeName, 'Name') then
Result := Addr(FName)
else
Result := inherited InternalAttributeAddress(AAttributeName);
end;
Esta maneira gera mais código, porém não quebrará o encapsulamento. [edit] Usando propriedades que acessam membrosAssessores de atributos são propriedades das classes de negócio, com tipos nativos do compilador. Provem uma forma mais fácil de acessar os valores dos atributos. O framework subject, do PressObjects, procurará por propriedades do tipo published com o mesmo nome dos atributos. TClient = class(TPressObject) _Name: TPressString; private function GetName: string; procedure SetName(const AValue: string); protected class function InternalMetadataStr: string; published property Name: string read GetName write SetName; end; Neste exemplo, sempre que o atributo Name é buscado pelos internos do framework, o método GetName é chamado. O mesmo acontece com o método SetName, sempre que o valor do atributo é alterado. Se o getter, setter ou a propriedade como um todo, não forem declados, ou (no caso da propriedade) não estiver na seção published, o framework trabalhará diretamente no atributo. A lista a seguir relaciona os tipos de propriedades nativos, pra cada tipo de atributo do PressObjects: TPressString = string TPressInteger = Integer TPressFloat = Double TPressCurrency = Currency TPressEnum = Enumeração declarada e registrada pelo usuário TPressBoolean = Boolean TPressDate = TDate TPressTime = TTime TPressDateTime = TDateTime TPressMemo = string TPressPicture = (não implementado) TPressBinary = sem recomendação, geralmente usado para streaming TPressPart and TPressReference = a classe de negócio que o atributo referencia TPressParts and TPressReferences = o próprio atributo, ou o atributo registrado pelo usuário Nota: não faz diferença usar atributos Parts e Reference na seção published. [edit] Atributos definidos pelo usuárioPra criar um atributo personalizado:
initialization TZipCodeString.RegisterAttribute; [edit] Classes query (consulta)Query é uma classe de negócio, cujas instâncias são usadas para recuperar objetos, sem conhecer seus IDs. Estas clases (queries) são descendentes de TPressQuery. Os atributos de uma query são usados para filtrar dados. TClientQuery = class(TPressQuery) _Name: TPressString; private function GetName: string; procedure SetName(const AValue: string); protected class function InternalMetadataStr: string; override; published property Name: string read GetName write SetName; end; Quando executada, esta query vai encontrar objetos da classe "client" baseada no atributo Name. Veja Metadata para mais detalhes sobre os tipos de consulta. [edit] Registrando classes de negócioPara registrar classes de negócio, chame o seguinte método na seção initialization da unit onde a classe estiver declarada: initialization TClient.RegisterClass; [edit] Registrando enumeraçõesPressObjects suporta atributos enumerados. Para criar uma enumeração e registrá-la, use: PressModel.RegisterEnumMetadata(TypeInfo(<EnumName>), '<EnumNameString>', ['<FirstItemStr>', '<SecondItemStr>', ...]); <EnumName> = nome da enumeração para o compilador (como foi declarado) <EnumNameString> = nome da enumeração para o framework. Para evitar confusão, é altamente recomendado usar o mesmo nome para o compilador e para o framework. <FirstItemStr>, <SecondItemStr> = Items de um array aberto, que carrega uma string para cada item da enumeração. Opcional, caso não seja fornecido, uma versão formatada do próprio item é usada. |
Personal tools |