Gerador de código para camada de acesso a dados “VIRIATO”
description
Transcript of Gerador de código para camada de acesso a dados “VIRIATO”
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 1
Gerador de código para camada de acesso a dados
“VIRIATO”
APRESENTAÇÃO INTERCALAR
11 de Março de 2005
Projecto de final de curso – 2004/2005
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 2
Agenda
1
2
3
4
Problema
Solução
Problemas associados à solução
Soluções de implementação
Desenho da aplicação
Estado actual
5
6
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 3
Agenda
1
2
3
4
Problema
Solução
Problemas associados à solução
Soluções de implementação
Desenho da aplicação
Estado actual
5
6
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 4
O Problema
• O tempo de desenvolvimento de uma Data Access Layer
• Código repetitivo (muda apenas o modelo de dados)– O que é automatizável?
• Passagem do modelo de objectos para o modelo relacional
UsarReverse
Engineering?
UsarReverse
Engineering?
•Método bastante utilizado mas com perda de metadata: nível de hierarquias entre os objectos e relação N-N
•Método bastante utilizado mas com perda de metadata: nível de hierarquias entre os objectos e relação N-N
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 5
Agenda
1
2
3
4
Problema
Solução
Problemas associados à solução
Soluções de implementação
Desenho da aplicação
Estado actual
5
6
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 6
A Solução
• Automatização das tarefas repetidas
• Criar uma Data Access Layer específica e strong typed
• Gerar o código da Data Access Layer com base em informação passada ao sistema
• Disponibilizar o código gerado ao programador
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 7
A Solução - Entradas do sistema
• Model engineering
– Construído a partir de um modelo de tipos descritos na linguagem UML
– Uma das metodologias aconselhadas para modelação de problemas
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 8
A Solução
ViriatoViriato
Mo
del
o U
ML
Código compilado ou em ficheiros
fonte
Framework
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 9
Agenda
1
2
3
4
Problema
Solução
Problemas associados à solução
Soluções de implementação
Desenho da aplicação
Estado actual
5
6
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 10
Problemas associados à solução
• Identificar um standard que represente o modelo de tipos, descrito na linguagem UML
• Como gerar o código?
• Como aumentar eficiência da Data Access Layer?
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 11
Agenda
1
2
3
4
Problema
Solução
Problemas associados à solução
Soluções de implementação
Desenho da aplicação
Estado actual
5
6
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 12
Soluções de implementação
• Utilização do standard XMI (XML Metadata Interchange) definido pela OMG – versão 1.2)
• Uso de padrões de código parametrizáveis para a geração de código
• Desenvolvimento de um mecanismo de cache
• Código gerado para a plataforma .Net
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 13
Soluções de implementação
• Criação de tradutores (XSLT) do standard XMI para diferentes fabricantes
<UML:Attribute xmi.id = 'S.16' name = ‘UmAtributo' visibility = ‘private' isSpecification = 'false' changeability = 'changeable' ownerScope = 'instance'> <UML:StructuralFeature.multiplicity> <UML:Multiplicity> <UML:Multiplicity.range> <UML:MultiplicityRange lower = '1' upper = '1'/> </UML:Multiplicity.range> </UML:Multiplicity> </UML:StructuralFeature.multiplicity> <UML:StructuralFeature.type> <Foundation.Core.Classifier xmi.idref = 'G.4'/> </UML:StructuralFeature.type></UML:Attribute>.<UML:DataType xmi.id = 'G.4' name = 'String' visibility = 'public' isSpecification = 'false'/>
<UML:Attribute xmi.id = 'S.16' name = ‘UmAtributo' visibility = ‘private' isSpecification = 'false' changeability = 'changeable' ownerScope = 'instance'> <UML:StructuralFeature.multiplicity> <UML:Multiplicity> <UML:Multiplicity.range> <UML:MultiplicityRange lower = '1' upper = '1'/> </UML:Multiplicity.range> </UML:Multiplicity> </UML:StructuralFeature.multiplicity> <UML:StructuralFeature.type> <Foundation.Core.Classifier xmi.idref = 'G.4'/> </UML:StructuralFeature.type></UML:Attribute>.<UML:DataType xmi.id = 'G.4' name = 'String' visibility = 'public' isSpecification = 'false'/>
TogetherTogether
<UML:Attribute xmi.id = 'S.291.2025.57.2' xmi.uuid = '41741876008C' name = ‘UmAtributo' visibility = 'private' isSpecification = 'false' ownerScope = 'instance' changeability = 'changeable' targetScope = 'instance' type = 'G.1' > <UML:StructuralFeature.multiplicity> <UML:Multiplicity > <UML:Multiplicity.range> <UML:MultiplicityRange xmi.id = 'id.2921925.1' lower = '1' upper = '1' /> </UML:Multiplicity.range> </UML:Multiplicity> </UML:StructuralFeature.multiplicity></UML:Attribute>.<UML:DataType xmi.id = 'G.1' name = 'String' visibility = 'public' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false' />
<UML:Attribute xmi.id = 'S.291.2025.57.2' xmi.uuid = '41741876008C' name = ‘UmAtributo' visibility = 'private' isSpecification = 'false' ownerScope = 'instance' changeability = 'changeable' targetScope = 'instance' type = 'G.1' > <UML:StructuralFeature.multiplicity> <UML:Multiplicity > <UML:Multiplicity.range> <UML:MultiplicityRange xmi.id = 'id.2921925.1' lower = '1' upper = '1' /> </UML:Multiplicity.range> </UML:Multiplicity> </UML:StructuralFeature.multiplicity></UML:Attribute>.<UML:DataType xmi.id = 'G.1' name = 'String' visibility = 'public' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false' />
Rational RoseRational Rose
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 14
Soluções de implementação
• Modelo descrito em linguagem intermédia
<ViriatoClass Name="Class3" Visibility="public" Abstract="false" Namespace="xmiTest"> <ViriatoAttribute Name="FieldClass1" Visibility="private" Type="xmiTest.testePackage.Class1" Changeability="changeable"/> <ViriatoAttribute Name=“UmAtributo" Visibility="private" Type=“String" Changeability="changeable"/></ViriatoClass>
<ViriatoClass Name="Class3" Visibility="public" Abstract="false" Namespace="xmiTest"> <ViriatoAttribute Name="FieldClass1" Visibility="private" Type="xmiTest.testePackage.Class1" Changeability="changeable"/> <ViriatoAttribute Name=“UmAtributo" Visibility="private" Type=“String" Changeability="changeable"/></ViriatoClass>
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 15
Agenda
1
2
3
4
Problema
Solução
Problemas associados à solução
Soluções de implementação
Desenho da aplicação
Estado actual
5
6
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 16
Desenho da aplicação
ViriatoViriato
Modelo descrito em linguagem intermédia
XSLT
Fab
rica
nte
XM
I
Código compilado ou em ficheiros
fonte
Gerador de código
Templates Framework
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 17
Agenda
1
2
3
4
Problema
Solução
Problemas associados à solução
Soluções de implementação
Desenho da aplicação
Estado actual
5
6
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 18
Estado actual
• Tradutores (XSLT) do standard XMI
• Gerador de Código com base em templates
• Camada de acesso a dados sem mecanismo de cache– Acessos sistemáticos à fonte de dados
Instituto Superior de Engenharia de LisboaDepartamento de Engenharia de Electrónica e TelecomunicaçõesLicenciatura em Engenharia Informática e de Computadores 19
Alunos Orientadores
• João Manso (24480)
• Pedro Rainho (24533)
• Rodrigo Guerreiro (24628)
• Luís Falcão
• Paulo Pereira