O módulo de interface com o usuário tem como objetivo ser flexível e modular. A
flexibilidade permite uma implementação genérica e independente de
soluções proprietárias, independente do pacote gráfico a ser
utilizado, e a independência modular, permite um desacoplamento entre
os componentes facilitando o reuso dos componentes e a manutenção do
software.
Para garantir estas características, o TDK utiliza o padrão de projeto
MVC e adota um paradigma de programação orientada a eventos,
como está descrito abaixo.
|
O TDK está projetado de acordo com o padrão de projeto MVC (Model-View-Controller
).
De forma geral, o MVC permite que uma aplicação seja extensiva e
modular separando as funcionalidades do modelo do negócio da apresentação e da
lógica de controle destas funcionalidades. Tal separação permite várias visões
para o mesmo modelo de dados, o que permite o suporte a vários clientes mais
fácil de implementar, testar e manter. O diagrama seguinte (retirado
do site
Java Blue Prints
) representa o padrão MVC:
i) O Modelo
representa os dados do domínio da aplicação e as regras do negócio para
governar o acesso e a atualização dos dados. Frequentemente o modelo serve como
uma aproximação em software do mundo real.
ii) A Visão
sintetiza o conteúdo do modelo. Ele acessa os dados do domínio da aplicação
através do modelo e especifica como o dado deve ser apresentado. É de
responsabilidade da visão manter a consistência na apresentação quando o modelo
muda.
iii) O Controlador traduz a interação com a visão em ações que devem
ser executadas pelo modelo. Em uma aplicação cliente stand-alone
, as interações com o usuário são cliques em botões ou seleções em menu,
enquanto em uma aplicação Web, elas aparecem como requisições através de
métodos GET e POST em HTTP. As ações executadas pelo modelo incluem ativar
processos de negócio ou mudar o estado do modelo. Baseado em interações com o
usuário e nas ações do modelo, o controlador responde selecionando a visão
apropriada que direciona os pedidos aos objetos responsáveis por
atendê-los.
|
Aplicando o MVC em uma aplicação,
uma parte da aplicação pode ser modificada sem que as outras partes se
atrapalhem. Vários problemas podem acontecer quando misturamos código de
acesso a dados, de lógica do negócio e de apresentação. A manutenção
destas aplicações fica difícil porque a interdependência entre
os seus componentes traz um grande efeito colateral sempre que uma mudança é
feita em alguma parte do código. Além disso, o alto acoplamento torna complexo
ou impossível o reuso de classes porque elas dependem muito umas das
outras. O padrão de projeto MVC resolve estes problemas desacoplando o acesso
aos dados, a lógica do negócio e a apresentação dos dados e interação do
usuário.
Para destacar classes do TDK de cada um dos módulos do MVC, no modelo do
TDK temos a classe TdkGeographicObject que representa um objeto
geográfico da Terralib (com os seus atributos e suas geometrias),
a TdkLayer que é um conjunto de TdkGeographicObjects que
são da mesma natureza (ou seja, tem os mesmos atributos) e as
próprias classes de geometrias da Terralib como a TePoint, TeLine2D,
TePolygon, TeText, TeRaster e
etc.
Em uma aplicação de visualização de dados geográficos, um mesmo dado do modelo
pode ser apresentado na visão através de diversos mapas que podem estar
associados a diferentes legendas. Os mapas e as legendas são elementos da
visão. No TDK, a classe ... representa um
mapa e a classe ...
representa uma legenda.
Já no controle, onde a reação à uma ação do usuário sobre os dados do
modelo, podemos citar a classe TdkInteractController que é responsável
pela interação do usuário com o Canvas, "escutando" eventos de mouse
click, de mouse move, de teclado, de
redimensionamento e de re-desenho (repaint). Note que uma ação
do usuário como um mouse click
pode causar diferentes tipos de reação, como a criação de um ponto ou
seleção de um objeto, isto depende da configuração do controle.
deste módulo podemos citar a classe
TdkTheme, responsável pela apresentação de um tema TerraLib encapsulando
atributos de visualização como estilos de objetos selecionados.
|