Diferença entre Referência e Enum

Há duas formas comuns de associar uma informação (um objeto) a uma característica, comportamento, categoria, etc. A primeira e mais comum é usando referência, a segunda é usando enumeration.

Referência

Referência é um objeto, geralmente de outra classe. Um pedido é associado a um cliente, um cliente é associado a uma cidade. No primeiro, o cliente é a referência, no segundo é a cidade.

A vantagem da referência é que ela pode ser estendida na própria aplicação, o usuário pode criar tantos novos clientes, ou tantas novas cidades quanto ele quiser. A desvantagem é a dificuldade em associar código a uma determinada referência.

Vamos supor que exista uma referência tipo de pagamento: a vista; cartão; cheque(s) pré. Uma determinada compra é associada a um destes tipos de pagamento, no entanto cada tipo de pagamento envolve rotinas, formulários, dados e detalhes diferentes um dos outros. Aqui é que entra o enumeration.

Enumeration

Enumeration é usado em situações como a forma de pagamento descrita acima, em que uma nova forma envolve novo código e novos comportamentos no sistema, aonde torna-se inútil permitir que o próprio usuário crie novas entradas.

Uma grande vantagem do enumeration é que é bem mais intuitivo associá-lo via programação do que através de referência. Uma linha de código que utilize enumeration pode ser escrita assim:

  if Compra.FormaPagamento = fpCartao then
    TDadosCartaoPresenter.Run;

Usar enumeration através de MVP é tão ou mais simples do que usar referência, o framework que o suporta possui rotinas para registro. Em PressObjects o código fica assim:

type
  TFormaPagto = (fpVista, fpChequesPre, fpCartao);
...
initialization
  PressModel.RegisterEnumMetadata(TypeInfo(TFormaPagto), 'TFormaPagto');

end.

A partir daí o enum TFormaPagto está declarado, registrado e pronto para uso. Um enumeration é comumente apresentado com um ComboBox, basta associá-lo ao atributo FormaPagto para que sua lista seja populada corretamente com os itens.