mrbar2000
unread,Mar 6, 2009, 7:50:34 PM3/6/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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.