SlideShare uma empresa Scribd logo
1 de 52
Marcius Gomes Brandão
Orientadora: Prof. Dra. Mariela Inés Cortés
Co-orientação : Prof. Msc. Ênyo J. T. Gonçalves
Introdução
                      Mudanças são
                       inevitáveis                                          Softwares são
                                                                             complexos!
       Mudanças são                  Software não é
       consideradas                 construído, e sim
          fáceis                       desenhado




                        Trabalho                Desenvolvimento
                       repetitivo é              de Software é
                      automatizado                  pesquisa




                                                        Melhores práticas    Experiência em
                Requisitos são
                                                           não estão          tecnologia é
                 incompletos
                                                            maduras            incompleta




   Software é                    Software é             Tecnologia muda       Tecnologia é
   Complexo                       Abstrato                rapidamente            vasta

                                                                                              Stepanek,2005
Introdução
                                      50% do código e tempo
                                       de desenvolvimento




Maior complexidade
esta no domínio




                         70% do
                      código é de
                     infraestrutura
Motivação


 Para o Standish Group a adoção de
   uma infraestrutura de software
padrão (por exemplo, frameworks de
 desenvolvimento) possibilita que a
equipe de desenvolvimento possa se
 concentrar no domínio de negócio
       em vez de tecnologia
Objetivos
      Orientação a Objetos
        Completude Comportamental
        Boas práticas de programação
        Modelo flexível e fácil de manter
      Rápido ciclo de desenvolvimento
        Redução de prazos
        Redução de custos
      Redução de “Lines of Code”
        Menos erros
        Maior qualidade
        Menor custo de manutenção
Metodologia: Embasamento teórico
Domain-Driven Design   Applying Domain-
Eric Evans,            Driven Design and
Addison–Wesley,2004.   Patterns
                       Jimmy Nilsson,
                       Addison-Wesley,2006




    Naked Objects
 Richard Pawson and    About Face
  Robert Matthews,     Alan Cooper,
     Wiley 2002        Wiley Publishing 2007
Metodologia: Projetos Reais
Metodologia: Estudos de Caso
Metodologia : Artigos científicos


  “Naked Objects View
  Language”                         “Entities – A framework Based on Naked
                                    Objects for the Development of Transient
                                                Web applications”




   “Monitoramento e Controle de           “Domain-Driven Design
Projetos com e-Kanban e Burndown:        using Entities Framework”
     Um Relato de Experiência”
Referencial teórico



         Domain-
          Driven
          Design


                   Naked Objects
Naked Objects Architectural Pattern




 Arquitetura padrão em 4-camadas     Arquitetura com Naked Objects

O problema : quando os requisitos    Alterações no domínio se propagam
 mudam, geralmente temos que        automaticamente para a interface do
   propagar essas alterações        usuário e as camadas de persistência
manualmente para as outras três               (PAWSON,2008).
    camadas (LÄUFER,2008).
Princípios NOP

Completude comportamental

 Único ponto de definição :
      Domain Model

     UIs 100% geradas
     automaticamente

Implementação genérica de
        serviços
Domain-Driven Design (DDD)




“código que resolve problema de
   domínio não se mistura com
   código que resolve problema
   de software” NILSSON(2006).
Domain-Driven Design (DDD)
Comparativo dos frameworks
NOVL
                                                Layout Grid (Cooper2007) é um esquema em
 Linguagem de descrição de layout              grade que fornece uma estrutura uniforme e
                                                consistente para a criação de uma interface com
 baseada no layoutgrid                         vários níveis de complexidade visual.
 para personalização de UI
 utilizando texto simples
    no lugar de estruturas mais sofisticadas
     como SWING, CSS, XML, HTML, etc
 independente de tecnologia
 de rápido aprendizado e
 dispensa o uso de ferramentas
  visuais de edição de interfaces
NOVL : Definição formal
NOVL : Diagramas de sintaxe
NOVL : Recursos
Convenção                                      Usado para
property     Nome case-sensitive da propriedade do naked object ou do controlador.
 Action      Nome case-sensitive do método do naked object ou do controlador.
    ,        Separador de colunas.
    ;        Separador de linhas.
:colspan     Colspan define quantas colunas o membro deve ocupar na grade
             (readonly) O membro sempre será exibido em modo de leitura (saída de dados)
    *
            incondicionalmente.
             (writeonly) O membro sempre será exibido em modo de edição (entrada de dados)
    #
            incondicionalmente.
             É um texto simples que será atribuído ao próximo elemento. No caso de um membro,
 'label'
            substitui o rótulo padrão.
   []        Define uma sub-grade.
   +         Indica que o componente deve ser apresentado inicialmente no modo expandido.
    -        Indica que o componente deve ser apresentado inicialmente no modo recolhido.
             Delimita uma sub-grade que será apresentada a partir dos membros do domínio de
  <...>
            uma coleção.
NOVL : Mestre-Detalhe
NOVL: Estudo de caso
Usando NOVL
Arquitetura
Plataforma de desenvolvimento
                     JEE5
                       Polimorfismo
                       JavaServer Faces
                       Java Persistence API
                       Bean Validation
                       Expression
                        Language
                       Reflexão
                       Annotations
Arquitetura
API Entities para UI
Infraestrutura para UI
BoundedControls
Filtragem
API Entities para persistência
public interface IRepository {
  void add(Object domain);
  int set(String domain, Object... parameters);
  void remove(Object domain);
  <T> T get(T domain);
  <T> T get(Class<T> domain, Object id);
  <T> List<T> get(String query, Object... parameters);
  <T> List<T> get(String query, int startIndex, int maxObjects, Object... params);
  long size(String query, Object... parameters);
  void persistAll();
  void clear();
}

public   class Repository {
Object   newInstance(Class entity)
  void   save(Object... entity)
  void   load(Object... entity)
  void   delete(Object... entity)
  List   query(String query, Object... parameters)
  List   query(String query, int start, int pageSize, Object... parameters)
   int   executeUpdate(String query, Object... parameters)
}
API Entities para segurança
Implementação da arquitetura
Criando o Domain Model
Prototipação
Implementação do Domain Model
    public class Order {
      private String number;
      private Customer customer;
      private Date orderDate;
      private int numberOfItems;
      private List<OrderLine> lines;
      private double totalAmount;
      private Status status;

     public Order() { . . .}

     public   void   addLine() { . . . }
     public   void   accept() { . . . }
     public   void   pay() { . . . }
     public   void   reject() { . . . }

     private boolean isOkAccordingToSize() { . . . }
     private boolean isOkAccordingToCreditLimit() { . . . }

     /* demais gets e sets omitidos */

     public enum Status {NewOrder,Accepted,Paid,Canceled;}
     }
Implementação do Domain Model
        @Entity
        public class Order implements Serializable {
          @Id @GeneratedValue
          private Integer id;

            @Column(length = 8, unique = true, nullable = false)
            @NotEmpty(message = "Enter the number of the Order")
            private String number;

            @ManyToOne(optional = false)
            @NotNull(message = "Enter the customer of the Order")
            private Customer customer;

            @Past @Temporal(TemporalType.DATE)
            private Date orderDate;

            @Column(precision = 4)
            @Min(value = 1, message = "Enter at least one line")
            private Integer numberOfItems = 0;

            @Valid
            @OneToMany(mappedBy = "order",
                        cascade = CascadeType.ALL,
                  orphanRemoval = true)
            private List<OrderLine> lines;

            @Column(precision = 8, scale = 2)
            private Double totalAmount;

            @NotNull
            @Enumerated(EnumType.STRING)
            private Status status;
        }
Instanciando o Domain Model
Instanciando o Domain Model
Mapeamento Objeto-User Interface
Mapeamento Objeto-User Interface
                   @Views({
                    @View(
                        title="List of Orders",
                         name="ListOfOrders",
                      filters="customer, Ctrl.DAO.filter()",
                      members="number,orderDate,numberOfItems,totalAmount,status"
                       footer="Ctrl.DAO.scroll()",
                         rows=10,
                   namedQuery="From domain.Order order by number",
                        roles="LOGGED"),

                    @View(
                        title="Add Order",
                         name="AddOrder",
                      members="[Header[#number,#orderDate;#customer:2];     "
                             +" Lines[addLine();                            "
                             +"       lines<#product,#numberOfUnits,#price>; "
                             +"       *numberOfItems];                      "
                             +" accept()]                                   ",
                   namedQuery="Select new domain.Order()",
                        roles="Admin,SalesMan")
                         })
                   public class Order implements Serializable {
Contribuição geral
      Desenvolvimento focado no domínio
      UI robustas e consistentes
      Redução de “Lines of Code” redundantes
        Menos erros
        Maior qualidade
        Menor custo de manutenção
      Rápido ciclo de desenvolvimento
        Redução de prazos
        Redução de custos
Contribuições da NOVL
   Eliminação de uns dos principais limitadores do
    padrão Naked Objects
      UI personalizadas
   Não invalida o padrão
   Independência de tecnologia
   Uso SEM editores visuais de UI
   Ciclo de aprendizado reduzido
   Manutenção facilitada
   Despreocupação da implementação da UI
Contribuições do Entities
 Extensão do padrão Naked Objects
    UI customizáveis
    Múltiplas visões por objeto de domínio
    Aplicações soberanas e transientes
 Suporte a Domain-Driven Design
    Essência da OO : Completude comportamental
    Foco no domínio
    Domínio independente da tecnologia
Trabalhos futuros
                     Upgrade da NOVL
                     Relatórios
                     Módulo de Testes
                     Outras plataformas
Perguntas?




             “A simplicidade é o último
                  grau de sofisticação”
                    Leonardo da Vinci.

Mais conteúdo relacionado

Mais procurados

RSpec - Desenvolvimento Baseado em Teste
RSpec - Desenvolvimento Baseado em TesteRSpec - Desenvolvimento Baseado em Teste
RSpec - Desenvolvimento Baseado em TesteEduardo Mendes
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignÍtalo Bandeira
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto AdapterMatheus Andrade
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Paulo Victor Gomes
 
Padrão de Projeto - Adapter
Padrão de Projeto - AdapterPadrão de Projeto - Adapter
Padrão de Projeto - AdapterJuliana Cindra
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrThiago Boufleuhr
 
Analise e Desenho Orientado a Objetos com UML
Analise e Desenho Orientado a Objetos com UMLAnalise e Desenho Orientado a Objetos com UML
Analise e Desenho Orientado a Objetos com UMLRildo (@rildosan) Santos
 
Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweightMateus Amaral
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com PythonFrederico Cabral
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: AdapterMessias Batista
 

Mais procurados (20)

Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
 
RSpec - Desenvolvimento Baseado em Teste
RSpec - Desenvolvimento Baseado em TesteRSpec - Desenvolvimento Baseado em Teste
RSpec - Desenvolvimento Baseado em Teste
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014
 
Padrão de Projeto - Adapter
Padrão de Projeto - AdapterPadrão de Projeto - Adapter
Padrão de Projeto - Adapter
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 
Analise e Desenho Orientado a Objetos com UML
Analise e Desenho Orientado a Objetos com UMLAnalise e Desenho Orientado a Objetos com UML
Analise e Desenho Orientado a Objetos com UML
 
Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweight
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
 
Java 02
Java 02Java 02
Java 02
 
Design Patterns - Adapter e Decorator
Design Patterns - Adapter e DecoratorDesign Patterns - Adapter e Decorator
Design Patterns - Adapter e Decorator
 
DCI com PHP
DCI com PHPDCI com PHP
DCI com PHP
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: Adapter
 

Semelhante a Framework Entities - Apresentação da Defesa da Dissertacao

Semelhante a Framework Entities - Apresentação da Defesa da Dissertacao (20)

Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Framework Entities
Framework EntitiesFramework Entities
Framework Entities
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4
 
Entity Framework 4
Entity Framework 4Entity Framework 4
Entity Framework 4
 
Aula1
Aula1Aula1
Aula1
 
Sistemas Distribuidos Java
Sistemas Distribuidos JavaSistemas Distribuidos Java
Sistemas Distribuidos Java
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
ORM e EF
ORM e EFORM e EF
ORM e EF
 
Palestra
PalestraPalestra
Palestra
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6
 
Uml
UmlUml
Uml
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 

Mais de Marcius Brandão

Framework Entities - Dissertação
Framework Entities - DissertaçãoFramework Entities - Dissertação
Framework Entities - DissertaçãoMarcius Brandão
 
Framework Entities na CBSoft
Framework Entities na CBSoftFramework Entities na CBSoft
Framework Entities na CBSoftMarcius Brandão
 
Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- EntitiesMarcius Brandão
 
Paper NOVL - Naked Objects View Language- InfoBrasil 2012
Paper NOVL - Naked Objects View Language- InfoBrasil 2012Paper NOVL - Naked Objects View Language- InfoBrasil 2012
Paper NOVL - Naked Objects View Language- InfoBrasil 2012Marcius Brandão
 
NOVL - Naked Objects View Language - Apresentação InfoBrasil 2012
NOVL - Naked Objects View Language - Apresentação InfoBrasil 2012NOVL - Naked Objects View Language - Apresentação InfoBrasil 2012
NOVL - Naked Objects View Language - Apresentação InfoBrasil 2012Marcius Brandão
 

Mais de Marcius Brandão (6)

Framework Entities - Dissertação
Framework Entities - DissertaçãoFramework Entities - Dissertação
Framework Entities - Dissertação
 
Framework Entities na CBSoft
Framework Entities na CBSoftFramework Entities na CBSoft
Framework Entities na CBSoft
 
SBQS kanban e burndown
SBQS kanban e burndownSBQS kanban e burndown
SBQS kanban e burndown
 
Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- Entities
 
Paper NOVL - Naked Objects View Language- InfoBrasil 2012
Paper NOVL - Naked Objects View Language- InfoBrasil 2012Paper NOVL - Naked Objects View Language- InfoBrasil 2012
Paper NOVL - Naked Objects View Language- InfoBrasil 2012
 
NOVL - Naked Objects View Language - Apresentação InfoBrasil 2012
NOVL - Naked Objects View Language - Apresentação InfoBrasil 2012NOVL - Naked Objects View Language - Apresentação InfoBrasil 2012
NOVL - Naked Objects View Language - Apresentação InfoBrasil 2012
 

Último

activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxssuserf54fa01
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxRonys4
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfAlissonMiranda22
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptxLinoReisLino
 
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.MrPitobaldo
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 

Último (20)

activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptx
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdf
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx
 
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 

Framework Entities - Apresentação da Defesa da Dissertacao

  • 1. Marcius Gomes Brandão Orientadora: Prof. Dra. Mariela Inés Cortés Co-orientação : Prof. Msc. Ênyo J. T. Gonçalves
  • 2.
  • 3. Introdução Mudanças são inevitáveis Softwares são complexos! Mudanças são Software não é consideradas construído, e sim fáceis desenhado Trabalho Desenvolvimento repetitivo é de Software é automatizado pesquisa Melhores práticas Experiência em Requisitos são não estão tecnologia é incompletos maduras incompleta Software é Software é Tecnologia muda Tecnologia é Complexo Abstrato rapidamente vasta Stepanek,2005
  • 4. Introdução 50% do código e tempo de desenvolvimento Maior complexidade esta no domínio 70% do código é de infraestrutura
  • 5. Motivação Para o Standish Group a adoção de uma infraestrutura de software padrão (por exemplo, frameworks de desenvolvimento) possibilita que a equipe de desenvolvimento possa se concentrar no domínio de negócio em vez de tecnologia
  • 6. Objetivos  Orientação a Objetos  Completude Comportamental  Boas práticas de programação  Modelo flexível e fácil de manter  Rápido ciclo de desenvolvimento  Redução de prazos  Redução de custos  Redução de “Lines of Code”  Menos erros  Maior qualidade  Menor custo de manutenção
  • 7. Metodologia: Embasamento teórico Domain-Driven Design Applying Domain- Eric Evans, Driven Design and Addison–Wesley,2004. Patterns Jimmy Nilsson, Addison-Wesley,2006 Naked Objects Richard Pawson and About Face Robert Matthews, Alan Cooper, Wiley 2002 Wiley Publishing 2007
  • 10. Metodologia : Artigos científicos “Naked Objects View Language” “Entities – A framework Based on Naked Objects for the Development of Transient Web applications” “Monitoramento e Controle de “Domain-Driven Design Projetos com e-Kanban e Burndown: using Entities Framework” Um Relato de Experiência”
  • 11.
  • 12. Referencial teórico Domain- Driven Design Naked Objects
  • 13. Naked Objects Architectural Pattern Arquitetura padrão em 4-camadas Arquitetura com Naked Objects O problema : quando os requisitos Alterações no domínio se propagam mudam, geralmente temos que automaticamente para a interface do propagar essas alterações usuário e as camadas de persistência manualmente para as outras três (PAWSON,2008). camadas (LÄUFER,2008).
  • 14. Princípios NOP Completude comportamental Único ponto de definição : Domain Model UIs 100% geradas automaticamente Implementação genérica de serviços
  • 15. Domain-Driven Design (DDD) “código que resolve problema de domínio não se mistura com código que resolve problema de software” NILSSON(2006).
  • 17.
  • 19.
  • 20. NOVL Layout Grid (Cooper2007) é um esquema em  Linguagem de descrição de layout grade que fornece uma estrutura uniforme e consistente para a criação de uma interface com  baseada no layoutgrid vários níveis de complexidade visual.  para personalização de UI  utilizando texto simples  no lugar de estruturas mais sofisticadas como SWING, CSS, XML, HTML, etc  independente de tecnologia  de rápido aprendizado e  dispensa o uso de ferramentas visuais de edição de interfaces
  • 22. NOVL : Diagramas de sintaxe
  • 23. NOVL : Recursos Convenção Usado para property Nome case-sensitive da propriedade do naked object ou do controlador. Action Nome case-sensitive do método do naked object ou do controlador. , Separador de colunas. ; Separador de linhas. :colspan Colspan define quantas colunas o membro deve ocupar na grade (readonly) O membro sempre será exibido em modo de leitura (saída de dados) * incondicionalmente. (writeonly) O membro sempre será exibido em modo de edição (entrada de dados) # incondicionalmente. É um texto simples que será atribuído ao próximo elemento. No caso de um membro, 'label' substitui o rótulo padrão. [] Define uma sub-grade. + Indica que o componente deve ser apresentado inicialmente no modo expandido. - Indica que o componente deve ser apresentado inicialmente no modo recolhido. Delimita uma sub-grade que será apresentada a partir dos membros do domínio de <...> uma coleção.
  • 27.
  • 29. Plataforma de desenvolvimento  JEE5  Polimorfismo  JavaServer Faces  Java Persistence API  Bean Validation  Expression Language  Reflexão  Annotations
  • 35. API Entities para persistência public interface IRepository { void add(Object domain); int set(String domain, Object... parameters); void remove(Object domain); <T> T get(T domain); <T> T get(Class<T> domain, Object id); <T> List<T> get(String query, Object... parameters); <T> List<T> get(String query, int startIndex, int maxObjects, Object... params); long size(String query, Object... parameters); void persistAll(); void clear(); } public class Repository { Object newInstance(Class entity) void save(Object... entity) void load(Object... entity) void delete(Object... entity) List query(String query, Object... parameters) List query(String query, int start, int pageSize, Object... parameters) int executeUpdate(String query, Object... parameters) }
  • 36. API Entities para segurança
  • 38.
  • 41. Implementação do Domain Model public class Order { private String number; private Customer customer; private Date orderDate; private int numberOfItems; private List<OrderLine> lines; private double totalAmount; private Status status; public Order() { . . .} public void addLine() { . . . } public void accept() { . . . } public void pay() { . . . } public void reject() { . . . } private boolean isOkAccordingToSize() { . . . } private boolean isOkAccordingToCreditLimit() { . . . } /* demais gets e sets omitidos */ public enum Status {NewOrder,Accepted,Paid,Canceled;} }
  • 42. Implementação do Domain Model @Entity public class Order implements Serializable { @Id @GeneratedValue private Integer id; @Column(length = 8, unique = true, nullable = false) @NotEmpty(message = "Enter the number of the Order") private String number; @ManyToOne(optional = false) @NotNull(message = "Enter the customer of the Order") private Customer customer; @Past @Temporal(TemporalType.DATE) private Date orderDate; @Column(precision = 4) @Min(value = 1, message = "Enter at least one line") private Integer numberOfItems = 0; @Valid @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true) private List<OrderLine> lines; @Column(precision = 8, scale = 2) private Double totalAmount; @NotNull @Enumerated(EnumType.STRING) private Status status; }
  • 46. Mapeamento Objeto-User Interface @Views({ @View( title="List of Orders", name="ListOfOrders", filters="customer, Ctrl.DAO.filter()", members="number,orderDate,numberOfItems,totalAmount,status" footer="Ctrl.DAO.scroll()", rows=10, namedQuery="From domain.Order order by number", roles="LOGGED"), @View( title="Add Order", name="AddOrder", members="[Header[#number,#orderDate;#customer:2]; " +" Lines[addLine(); " +" lines<#product,#numberOfUnits,#price>; " +" *numberOfItems]; " +" accept()] ", namedQuery="Select new domain.Order()", roles="Admin,SalesMan") }) public class Order implements Serializable {
  • 47.
  • 48. Contribuição geral  Desenvolvimento focado no domínio  UI robustas e consistentes  Redução de “Lines of Code” redundantes  Menos erros  Maior qualidade  Menor custo de manutenção  Rápido ciclo de desenvolvimento  Redução de prazos  Redução de custos
  • 49. Contribuições da NOVL  Eliminação de uns dos principais limitadores do padrão Naked Objects  UI personalizadas  Não invalida o padrão  Independência de tecnologia  Uso SEM editores visuais de UI  Ciclo de aprendizado reduzido  Manutenção facilitada  Despreocupação da implementação da UI
  • 50. Contribuições do Entities  Extensão do padrão Naked Objects  UI customizáveis  Múltiplas visões por objeto de domínio  Aplicações soberanas e transientes  Suporte a Domain-Driven Design  Essência da OO : Completude comportamental  Foco no domínio  Domínio independente da tecnologia
  • 51. Trabalhos futuros  Upgrade da NOVL  Relatórios  Módulo de Testes  Outras plataformas
  • 52. Perguntas? “A simplicidade é o último grau de sofisticação” Leonardo da Vinci.

Notas do Editor

  1. E elaboração de trabalhos científicos submetidos a conferencias e jornais e a elaboração desta dissertação (ler slide)Obs1: InfoBrasil 2012: selecionado para publicação na Revista Infobrasil na sua versão impressaObs2: ECOOP 2012 - aguardandoaceitação.
  2. é um padrão arquitetural onde, a partir dos objetos de negócio que modelam o domínio, são gerados as interfaces de usuários, a persistência e o gerenciamento desses objetos.
  3. (ler slide)
  4. O primeiro passo foi resolver a questão da personalização das UI com a criação da NOVL...
  5. Essa é a definição formal da NOVL na notação EBNF para ser utilizada pelos parses...
  6. E esses são os diagramas de sintaxe gerados a partir da definição formal da NOVL para serem utilizados pelos desenvolvedores.
  7. Interface típica de um framework NOPPodendo variar de acordo com o framework e tecnologia utilizados, a Figura 11 mostra um layouttípicamente empregado na maioria dos frameworks que programam o NOP. Qualquer exibição de outro nakedobject seguirá o mesmo modelo. Na tela na figura, gerada pelo NOF-MVC para o nakedobjectProduct, todas as propriedades são expostas verticalmente. A maioria dos frameworks permite a definição da ordem em que as propriedades são exibidas. As ações do nakedobject são expostas em um menu suspenso acima da grade principal, e as ações dos controladores abaixo. Interface personalizada usando NOVLA apresentação das mesmas informações pode ser personalizada usando a NOVL. Na Figura 12 é apresentada uma possível interface para Product. Observe que nesta visão as propriedades e ações são agrupadas por co-relação. Propriedades importantes para o usuário ficam em primeiro plano e as menos importantes em segundo plano ou ocultas.
  8. Agora veremos como desenvolver uma aplicação na abordagem DDD usando o Entities...