Escolar Documentos
Profissional Documentos
Cultura Documentos
Mrio Guedes
Demandas atuais de
desenvolvimento
No de hoje que as solues de desenvolvimento
so cada vez mais complexas:
Plataformas diferentes
Integrao
Regras de Negcio
Oportunidade
A nova RTTI (Delphi 2010) nos d a oportunidade
de entregar muito mais com menos cdigo;
Cdigo mais limpo: menos rudo;
Mas muitos de ns pensamos que para poucos e
iniciados;
Mas no .
PROGRAMAO
BASEADA EM REGRAS
Programao Baseada em
Regras
uma forma de abordar os desafios de
desenvolvimento;
Busca facilitar a rpida adaptao do software
uma mudana de regra de negcio;
No Delphi, podemos usar a RTTI, Generics e
Customs Attributes para atingir este objetivo;
No substitui nenhum paradigma: trata-se apenas
de uma estratgia;
RTTI
O que RTTI?
Desde o Delphi 2010 est muito mais simples de usar e muito mais
poderoso;
Generics
Usamos a notao:
<tipo>
Atributos Personalizados
A partir do Delphi 2010 temos um novo recurso na
RTTI que a classe TCustomAttributes;
uma maneira de atribuir uma qualidade, ou
uma informao a qualquer elemento da
programao:
Classe, Record, Campos, Mtodos, Parmetros,
etc;
Atributos Personalizados
caracterizado por uma classe descendente de
TCustomAttributes que por sua vez no
implementa nada de especial;
Ao atribuir a qualidade a um elemento usamos a
notao:
[Nome_da_Classe(Parmetros do Construtor)]
[TExemplo(Delphi XE 3)]
property Exemplo: string read FExemplo;
Com funciona?
A unidade System.RTTI possui todo o arsenal
necessrio para tirar proveito do recurso;
A unidade muito bem documentada, facilitando o
entendimento;
Oferece vrias classes de Reflexo;
TRTTIContext
o tipo responsvel por iniciar os recursos da RTTI;
_ctx := TRTTIContext.Create;
_ctx.Free;
GetType
GetTypes
FindType
GetPackages
TRTTIType
Prov informaes sobre um tipo;
Possui mtodos para obter:
Campos
Mtodos
Propriedades
TRTTIProperty
Prov informaes sobre uma propriedade;
Entre outras informaes oferecidas destaca-se:
TValue
o tipo de reflexo que representa o valor de um
propriedade de uma determinado tipo em uma
determinada instncia ;
Para determinar o tipo do valor podemos usar o
mtodo: IsType<tipo>
Para recuperar o valor podemos usar o mtodo:
AsType<tipo>
Parece com o variant mas no tem nada a ver;
TCustomAttributes
Toda classe de reflexo possui o mtodo
GetAttributtes que retorna um
TArray<TCustomAttributes>
DEMONSTRAO
PRTICA
Exemplo de aplicao
Vamos imaginar um sistema que deve gerar um
documento eletrnico para o Governo, como por
exemplo o EFD-Pis/Cofins;
Estratgia de desenvolvimento
Ser desenvolvido uma classe base que atravs dos
atributos personalizados gerar a string corretamente:
TGeraLinha
Cada linha descrita no layout ter uma classe
correspondente, sendo que cada campo imprimvel
ser representado por uma propriedade publicada
(escopo published)
Cada propriedade que representa um campo
imprimvel ter os atributos personalizados
necessrios
Estratgia de desenvolvimento
As classes de gerao de linha sero instanciadas e
enfileiradas em uma lista especializada nos
permitindo gerar manipular as instncias a
qualquer momento;
Atributos personalizados
identificados - Regras
No nosso cenrio hipottico, identificamos algumas regras
possveis e suas caractersticas, a saber:
TCodigoLinhaAttribute
TOrdemImpressaoAttribute
TStringVariavelAttribute
TStringFixaAttribute
TDataAttribute
TMonetarioAttribute
E se?
Consideraes finais
Vrias solues podem aplicar este recurso:
ORM
Serializao de objetos
Protocolos de comunicao
Gerao de documentos (EDI)
Classes Proxies de comunicao (Data Snap)
Links interessantes
Eu Gosto do Delphi
Mrio Guedes
http://eugostododelphi.blogspot.com.br/search/label/rtti
Perguntas?
atendimento@embarcadero.com.br
(11) 5643-1333
Obrigado!
Mrio Guedes
mario.guedes@arrayof.com.br
http://eugostododelphi.blogspot.com
http://br.linkedin.com/in/jmarioguedes
http://facebook.com/eugostododelphi
http://twitter.com/eugostododelphi