Comboboxes ou Lookups

3 views
Skip to first unread message

Marcelo Mrack

unread,
May 16, 2007, 9:21:09 PM5/16/07
to treelayer-merlin
Campos de referencia podem ser exibidos como comboboxes ou lookups,
mas qual é (e porque é) o padrão se nada for especificado ?

Por exemplo,

Dada a classe...

class Cliente {

String nome;
Cidade cidade;

}

...a tela de cadastro do cliente vai exibir o campo Cidade como uma
combo ou um lookup por padrao ?

A resposta é (de novo) depende. Para responder, vamos as heuristicas.

Sera uma combo se cidade for uma classe simples, sem muitos campos
(talvez somente codigo e nome) e se dependencias para outras classes.
Isso esta baseado numa heuristica de pensa assim: Hum, cidade é uma
classe bem simples e qua nao depende de ninguem (uma UF, por exemplo).
Assim, é provavel (a heuristica) que existam poucos registros na
tabela (do banco) e por isso mostro ela numa combo, sendo o nome (e
nao o codigo) o campo a ser exibido porque ele é o mais comum (outra
heuristica) no contexto do sistema.

Porem, ela pode ser uma lookup se ela for uma clase complexa (uns 15
ou mais atributos) e/ou ela possuir dependencias para outras classes,
como por exemplo UF. Se ela tivar muitos campos, provavelmente ela é
um cadastro importante no sistema (armazenamos muitos campos em uma
tabela se ela for importante - se ela for simplesmente um "pre-
cadastro", ela teria poucos campos). Se ela tiver muitos campos a
heuristica é que ela é uma tabela "core" dos sistema (imagine o
sistema do IBGE para estatisticas de populacoes e indices economicos,
logo essa tabela de cidade deve ter muitas informacoes e, (a
heuristica) diz que provavelmente existirao muitos registros nessa
tabela). Tendo muitos campos, é provavel que muitos desses campos
sejam referencias para outras classes (tabelas) e assim, ela possui
muitas FKs, digamos asism. Cada FK que ela possuir contem uma
informacao se ela é "Identify" ou não. FKs identify indicam que a
cidade "pertence" ao atributo ao qual ela apresenta a FK: em outras
palavras, a Cidade é filha do campo referenciado pela FK (no caso,
poderia ser uma FK para UF). Sendo filha, é provavel que para cada UF
do sistema, existam cidades distintas. E isso implica (heuristica) que
muitas cidades existiram. Se UF possuir outras FKs "identify" (como
por exemplo, uma FK para Pais) é provavel que existiram muitas UFs no
sistema (varias para cada Pais). Seguindo essa logica, podemos navegar
nas FKs de Cliente > Cidade > UF > Pais > Continente (etc.). Sendo
essas FKs todas "identify" (e parece que sao mesmo :-) ) a heuristica
que temos é que, quanto mais FKs identify derivadas (a profundidade do
grafo de navegacao a partir de cidade), mais temos tendencia de termos
mais e mais cidades no sistema, o que indica (a heuristica) que cidade
é uma Lookup.

Assim, resposta simples é:

Para campos de referencia (FKs), o controle de tela será:

Uma Combo se essa FK apontar para um objeto simples (poucos atributos
e sem referencias para outros objetos).

Uma Lookup se essa FK apontar para um objeto complexo (muitos
atributos e/ou for um root de um grafo muito profundo de FKs identify)

O legal é entao ter um algoritmo que faca essa escolha e que seja
configuravel pelos parametros das condicoes acima.

Se o algoritmo falhar, vai a anotacao no campo Cidade (a qual esta com
tendencia de ser @RenderAs )

Att,

Marcelo Mrack

unread,
Jun 21, 2007, 2:24:29 AM6/21/07
to treelayer-merlin
E aqui vai umas idéias sobre o comportamento das combos (e looukps)...

Em combos (ou outros controle analogos), quando uma combo dependente
for expandida antes da combo principal ter um valor selecionado (por
exemplo, expandir Cidades antes de ter selecionado uma UF), nenhum
item na combo dependente é mostrado (considerando que mesmo sendo
depentende, a combo de Cidades esteja habilitada) ... Tambem poderia
ser feito o seguinte: ao expandir a combo Cidades com a tecla Control
selecionada, essa combo exibiria todas as cidades disponiveis,
independente do Estado. Embora essa seja uma operacao pesada para o
banco (e a rede), ela pode ser importante, nos casos em que o usuario
conhece somente o nome da Cidade (combo dependente) e nao do Estado
(combo principal). Pode parecer estranho conhecer a cidade e nao a UF,
mas em outros casos, essa informacao pode nao ser tao trivial.

Marcos Barreto

unread,
Jun 21, 2007, 11:03:02 AM6/21/07
to treelaye...@googlegroups.com
Não sou muito fã deste tipo de coisa nao, no meu caso geralmente vai ter uma lupa do lado do campo cidade substituindo o possível combo, meu banco guarda todas as cidades do brasil e seria um problema abrir um combo com todas elas. Dificilmente utilizo combos nos meus sistemas justamente por causa do desempenho na carga destes combos.

Marcelo Mrack

unread,
Jun 21, 2007, 11:23:57 AM6/21/07
to treelayer-merlin
Oi Marcos,

Sem problemas. A lupa que voce fala é o tal de controle de lookup...
essa funcionalidade que comentei tambem funcionaria com as lookups,
mas caso nao fosse interessante disponibilizar isso, é somente alterar
o comportamento padrao....(lembrando que tudo isso entra no sistema de
historico, ficando pro-ativo para as novas telas...)

Essas ideias sao coisas tipo "carta na manga", que em alguns sistemas
sao necessarios e dai ja existe algo previsto...

Um abracao.

Reply all
Reply to author
Forward
0 new messages