MVCBr – Fazendo CLONE de Objetos – Desvendando framework #6

Share Button

Impressionante o número de vezes que precisamos copiar os valores de atributos de um objeto para outro ou simplesmente criar um novo com as mesmas propriedades.
Conhecendo a classe TMVCBrPrototype notamos o poder de RTTI combinado com Generics nos permite facilitar o trabalho sem precisar digitar todos aquelas propriedades envolvendo os dois objetos.

base
Usando Generics para passar o tipo de classe a ser manipulado e com RTTI descobrimos quais os atributos desta classe… agora é só os valores de uma para o outro.

elementar meu caro
Uso de Generics tem por finalidade facilitar o RTTI pegar quais os atributos a serem copiados do objeto alvo. Para que a cópia ocorra, o objeto de origem e de destino precisam possuir o mesmo nome para o atributo. O ideal é que ambos possuam a mesma tipagem, ainda que não seja obrigatório.

  TMVCBrPrototype = Class(TInterfacedObject, IMVCBrPrototype)
  public
    class procedure Copy<T: Class>(ASource: T; ATarget: T); static;
    class function Clone<T: Class>(ASource: T): T; static;
    class function New<T: Class>: T; static;
  end;



// Como copiar de B para A

var B,A : TMinhaClasse;

...
    se:   B := TMinhaClasse.create;
          B.nome := 'x';

    clone:
         A := TMVCBrPrototype.Clone<TMinhaClasse>(B);   /// Cria A e copia B para A


    para copiar (requer que A e B já estejam criados):
        TMVCBrPrototype.Copy<TMinhaClasse>(B,A);   /// copia B para A

TMVCBrPrototype

MVCBr – Fazendo CLONE de Objetos – Desvendando framework #6

0

Pros

Cons