Trabalhando com Interfaces
O Jazz foi modelado para a programação baseada em Interfaces, não pretendo me aprofundar neste assunto aqui, pois seria assunto para um artigo completo, por enquanto vou apenas listar algumas dicas:
· Todas as declarações de variáveis e campos devem ser Interfaces e não objetos, note no exemplo a seguir que a variável FPersister é do tipo IPersister e não TPersister.
var
FPersister: IPersister;
· Se precisar passar objetos de negócio como parâmetros em métodos, estes parâmetros devem ser constantes (const) e declarados como interface.
procedure SaveObject(const AObject: IObjectType);
· Nunca destrua um objeto (Objeto.Free ou FreeAndNil(Objeto)), quando ele sair de contexto será eliminado da memória automaticamente.
· Para fazer TypeCast de utilize o operador as, e antes procure saber se a interface suporta o tipo que você deseja com a função supports ou utilizando QueryInterface, ambos possuem vários overrides, consulte a ajuda do delphi para saber todas as opções disponíveis, vou listar apenas algumas para entender como funciona.
procedure SaveItem(const AObject: IInterface);
var
LObject: IObjectType;
begin
if Supports(AObject, IObjectType) then
FPersister.Save(LObject as IObjectType); // utilizando as
// ou
if AObject.QueryInterface(IObjectType, LObject) = S_OK then
FPersister.Save(LObject);
end;
· Tome cuidado para não criar referências circulares quando dois objetos fazem referências mútuas, por exemplo Lista e Item de Lista, quando uma lista de interfaces (TInterfaceList) é criada, ela armazena a referência ao item, se o item também fizer referência à lista, ambos nunca sairão de contexto e não serão destruídos pelo coletor de lixos, se for necessário uma referência deste jeito, em um dos lados apenas guarde o Ponteiro (Pointer) do objeto.
private
FObjectList: Pointer;
...
procedure TStatusObserver.SetObjectList(const Value: IObjectListType);
begin
FObjectList:= Pointer(Value);
end;
function TStatusObserver.GetObjectList: IObjectListType;
begin
Result:= IObjectListType(FObjectList);
end;
Tomando estes cuidados você poderá escrever ótimos programas baseado em interfaces.

0 Comments
You can be the first one to leave a comment.