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.

 

Leave a Comment

 

You must be logged in to post a comment.