















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Este documento discute as falácias comuns na distribuição de objetos em aplicações empresariais, incluindo a transparência falsa de middleware, a necessidade de interfaces remotas e locais diferentes e o custo de invocações remotas. O texto também apresenta soluções alternativas, como o remote facade e o data transfer object.
Tipologia: Resumos
1 / 23
Esta página não é visível na pré-visualização
Não perca as partes importantes!
















Ricardo Martinho ([email protected]) Desenvolvimento de Aplicações Empresariais DEI – ESTG – Instituto Politécnico de Leiria
(^) “Vamos ter um grande aumento de desempenho na aplicação!”
(^) “Os objetos invocam-se entre eles, sem terem de saber se o invocador está no mesmo processo, noutro processo ou mesmo noutra máquina!”
Interfaces remotas e locais (^) Distribuir objetos colocando as respetivas classes em máquinas diferentes nem sempre é a melhor solução: (^) Uma invocação a um procedimento (método) dentro do mesmo processo é muito, muito rápida; (^) Uma invocação a um procedimento entre dois processos separados é muito mais lenta… (^) …e se esses processos estiverem a correr em máquinas diferentes, ainda mais lenta se torna, ficando dependente da topografia da rede… (^) Consequentemente, as interfaces remota e local para um mesmo objeto têm de ser diferentes.
(^) A interface local: (^) Deve ser mais detalhada, com nível de granularidade maior ( fine-grained ). (^) Exemplo: para uma classe Morada, a interface deve definir separadamente getters e setters para os atributos rua, numero, localidade, codigo_postal); (^) Segue o princípio geral de POO onde podemos combinar e sobrepor muitas “peças” pequenas de várias formas para estender o design no futuro…
(^) O que os fabricantes de ferramentas e frameworks de software apregoam… (^) “Não existe overhead ao utilizarem o nosso middleware para invocações remotas ou locais…” (^) Verdade, mas não evita o ponto essencial: um objeto que pode ser utilizado remotamente deve ter uma interface menos detalhada do que outro a ser utilizado localmente… (^) Solução de compromisso entre granularidade e o custo de uma invocação remota + um modelo de programação mais estranho…
(^) Portanto, o objetivo passa por minimizar a quantidade de colaborações inter-processos ; (^) Não basta agarrar num conjunto de classes e “atirar-lhes para cima” uma framework de distribuição de objetos (e.g. Java RMI); (^) Vai originar uma grande quantidade de invocações remotas, e a necessidade de definir interfaces menos detalhadas… (^) …e mesmo assim, ficamos com muitas invocações remotas, e um sistema com pouca flexibilidade e capacidade de evoluir…
(^) Evitar ao máximo a distribuição, eliminado as possíveis interações entre processos; (^) Adotar algumas estratégias de distribuição:
(^) Adotar algumas estratégias de distribuição (cont.):
Remote Facade (^) Provides a coarse-grained facade on fine- grained objects to improve efficiency over a network.
Remote Facade (^) Utilizam-se objetos e invocações fine-grained num único processo, e coloca-se uma fachada (interface remota, coarse-grained ) sobre esses objetos na fronteira da distribuição; (^) Consegue-se o melhor dos 2 mundos: mais detalhe nas invocações locais, e uma interface remota optimizada para invocações inter-processos; (^) A Remote Facade não tem lógica de negócio… (^) A única função é traduzir os métodos com menos detalhe ( coarse-grained ) da fachada para os métodos com mais detalhe ( fine-grained ) dos objetos para a qual está a servir de fachada.
Remote Facade (^) Se as classes dos objetos fine-grained estão disponíveis em ambos os lados da ligação: (^) Posso transferi-los diretamente por cópia. Por exemplo: (^) getDadosMorada() - cria uma cópia do objeto original Morada; (^) setDadosMorada()- recebe um objeto Morada e utiliza-o para atualizar os dados de um objeto Morada já existente. (^) No entanto, pode ser difícil ou mesmo impossível “duplicar” o modelo de domínio em ambos os lados da ligação… (^) Pode não ser desejável… (^) Pode ser difícil serializar parte de um modelo de domínio (somente aquela que um cliente quer), devido à sua rede de associações complicada. >>>
Data Transfer Object (DTO) (^) An object that carries data between processes in order to reduce the number of method calls.
Data Transfer Object (DTO)
(^) Difíceis (senão impossíveis) de serializar!
(^) Primitivos, classes simples (strings, datas, ou outros DTOs!). (^) Muitas vezes são desenhados tendo em conta determinado objeto/aplicação cliente (e.g.: DTOs para uma página Web).
Data Transfer Object (DTO) (^) Formas mais comuns: (^) Record Sets – por exemplo para transferir dados de uma BD SQL; (^) Collections – dicionários (e.g. Hashtables) são melhores que arrays … (^) Os índices dos arrays condicionam o código; (^) Nos dicionários podem utilizar-se strings com significado como chaves.