Sugestões para o Binding

3 views
Skip to first unread message

mrbar2000

unread,
Mar 6, 2009, 7:50:34 PM3/6/09
to Infra - Integrated Frameworks
Oi pessoal,

Estamos implementando o binding framework e temos o seguinte:

Binding - descreve o binding entre 2 objetos Bindable
BindManager - objeto que vai manter e gerenciar os Binding's
Bindable - Um dos lados da relação binding
BindableControl - Herdado de Bindable, mas possui a propriedade a ser
usada para pegar/setar valor

Qualquer classe que precisa ser ligada tem de implementar Bindable/
BindableControl, E assim podemos usar o BindManager para ligar
controle vcl <---> controle vcl, ou controle vcl <---> atributo de um
infratype. ex:

// Ligando o Edit1.Text ao Person.Nome. e neste caso ao mudar o edit
vai atualizar o atributo
BindManager.Add(Person, 'Nome', Edit1, 'Text').TwoWay;
// Ligando o Edit1.Color ao Person.Situação
BindManager.Add(Person, 'Situacao', Edit1, 'Color');
// Ligando o Labe1.Color a Edit1.Color
BindManager.Add(Edit1, 'Color', Label1, 'Color');

Vou expor aqui o que estamos pensando e gostariamos da opinião de
voces. Temos 2 interfaces Bindable como falei:

IBindable = interface(IBaseElement)
...
property Value: IInfraType read GetValue write SetValue;
end;

IBindableControl = interface(IBindable)
...
property PropertyPath: String read GetPropertyPath;
end;

E estamos pensando em ter wrappers para evitar herança de controles
VCL ou heranças de infratypes.

// temos uma classe base para controles VCL, e um exemplo deste
wrapper para Edit.
// TBindableControl vai internamente usar rtti para preencher e
resgatar o valor de alguma propriedade
// do controle e por isso o PropertyPath acima
TBindableControl <|-------- TBindableEdit

// Wrapper para qualquer infratype. A propriedade Value dste wrapper
aponta para o infratype a ser apresentado.
TBindableInfraType

Como pode ser visto acima, BindManager irá criar 2 objetos bindable
para cada Add. e vai registrar cada dupla em um objeto bindable,
armazenando-os em uma lista interna. Ou seja o BindManager fica mais
como um container de bindings.

O que acham? esta seria a melhor abordagem?

Algumas vantagens na minha opinião:
- não necessitar fazer herança da VCL
- qualquer classe pode ser bindable usando wrappers

Algumas desvantagens na minha opinião:
- ter 2 bindables para cada Add. poderia ter um bindable apenas para o
Edit independente da quantidade de binding, no binding é que ficaria a
informação do atributo que vai apresentar o dado.
Reply all
Reply to author
Forward
0 new messages