Marcius Gomes BrandãoOrientadora: Prof. Dra. Mariela Inés CortésCo-orientação : Prof. Msc. Ênyo J. T. Gonçalves
Introdução                      Mudanças são                       inevitáveis                                          So...
Introdução                                      50% do código e tempo                                       de desenvolvim...
Motivação Para o Standish Group a adoção de   uma infraestrutura de softwarepadrão (por exemplo, frameworks de desenvolvim...
Objetivos      Orientação a Objetos        Completude Comportamental        Boas práticas de programação        Modelo...
Metodologia: Embasamento teóricoDomain-Driven Design   Applying Domain-Eric Evans,            Driven Design andAddison–Wes...
Metodologia: Projetos Reais
Metodologia: Estudos de Caso
Metodologia : Artigos científicos  “Naked Objects View  Language”                         “Entities – A framework Based on...
Referencial teórico         Domain-          Driven          Design                   Naked Objects
Naked Objects Architectural Pattern Arquitetura padrão em 4-camadas     Arquitetura com Naked ObjectsO problema : quando o...
Princípios NOPCompletude comportamental Único ponto de definição :      Domain Model     UIs 100% geradas     automaticame...
Domain-Driven Design (DDD)“código que resolve problema de   domínio não se mistura com   código que resolve problema   de ...
Domain-Driven Design (DDD)
Comparativo dos frameworks
NOVL                                                Layout Grid (Cooper2007) é um esquema em Linguagem de descrição de la...
NOVL : Definição formal
NOVL : Diagramas de sintaxe
NOVL : RecursosConvenção                                      Usado paraproperty     Nome case-sensitive da propriedade do...
NOVL : Mestre-Detalhe
NOVL: Estudo de caso
Usando NOVL
Arquitetura
Plataforma de desenvolvimento                     JEE5                       Polimorfismo                       JavaSer...
Arquitetura
API Entities para UI
Infraestrutura para UI
BoundedControls
Filtragem
API Entities para persistênciapublic interface IRepository {  void add(Object domain);  int set(String domain, Object... p...
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;      pri...
Implementação do Domain Model        @Entity        public class Order implements Serializable {          @Id @GeneratedVa...
Instanciando o Domain Model
Instanciando o Domain Model
Mapeamento Objeto-User Interface
Mapeamento Objeto-User Interface                   @Views({                    @View(                        title="List o...
Contribuição geral      Desenvolvimento focado no domínio      UI robustas e consistentes      Redução de “Lines of Cod...
Contribuições da NOVL   Eliminação de uns dos principais limitadores do    padrão Naked Objects      UI personalizadas  ...
Contribuições do Entities Extensão do padrão Naked Objects    UI customizáveis    Múltiplas visões por objeto de domíni...
Trabalhos futuros                     Upgrade da NOVL                     Relatórios                     Módulo de Test...
Perguntas?             “A simplicidade é o último                  grau de sofisticação”                    Leonardo da Vi...
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
Próximos SlideShares
Carregando em…5
×

Framework Entities - Apresentação da Defesa da Dissertacao

472 visualizações

Publicada em

Publicada em: Educação
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
472
No SlideShare
0
A partir de incorporações
0
Número de incorporações
100
Ações
Compartilhamentos
0
Downloads
11
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • 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.
  • é 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.
  • (ler slide)
  • O primeiro passo foi resolver a questão da personalização das UI com a criação da NOVL...
  • Essa é a definição formal da NOVL na notação EBNF para ser utilizada pelos parses...
  • E esses são os diagramas de sintaxe gerados a partir da definição formal da NOVL para serem utilizados pelos desenvolvedores.
  • 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.
  • Agora veremos como desenvolver uma aplicação na abordagem DDD usando o Entities...
  • Framework Entities - Apresentação da Defesa da Dissertacao

    1. 1. Marcius Gomes BrandãoOrientadora: Prof. Dra. Mariela Inés CortésCo-orientação : Prof. Msc. Ênyo J. T. Gonçalves
    2. 2. 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
    3. 3. Introdução 50% do código e tempo de desenvolvimentoMaior complexidadeesta no domínio 70% do código é de infraestrutura
    4. 4. Motivação Para o Standish Group a adoção de uma infraestrutura de softwarepadrão (por exemplo, frameworks de desenvolvimento) possibilita que aequipe de desenvolvimento possa se concentrar no domínio de negócio em vez de tecnologia
    5. 5. 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
    6. 6. Metodologia: Embasamento teóricoDomain-Driven Design Applying Domain-Eric Evans, Driven Design andAddison–Wesley,2004. Patterns Jimmy Nilsson, Addison-Wesley,2006 Naked Objects Richard Pawson and About Face Robert Matthews, Alan Cooper, Wiley 2002 Wiley Publishing 2007
    7. 7. Metodologia: Projetos Reais
    8. 8. Metodologia: Estudos de Caso
    9. 9. 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 DesignProjetos com e-Kanban e Burndown: using Entities Framework” Um Relato de Experiência”
    10. 10. Referencial teórico Domain- Driven Design Naked Objects
    11. 11. Naked Objects Architectural Pattern Arquitetura padrão em 4-camadas Arquitetura com Naked ObjectsO 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ênciamanualmente para as outras três (PAWSON,2008). camadas (LÄUFER,2008).
    12. 12. Princípios NOPCompletude comportamental Único ponto de definição : Domain Model UIs 100% geradas automaticamenteImplementação genérica de serviços
    13. 13. 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).
    14. 14. Domain-Driven Design (DDD)
    15. 15. Comparativo dos frameworks
    16. 16. 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
    17. 17. NOVL : Definição formal
    18. 18. NOVL : Diagramas de sintaxe
    19. 19. NOVL : RecursosConvenção Usado paraproperty 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.
    20. 20. NOVL : Mestre-Detalhe
    21. 21. NOVL: Estudo de caso
    22. 22. Usando NOVL
    23. 23. Arquitetura
    24. 24. Plataforma de desenvolvimento  JEE5  Polimorfismo  JavaServer Faces  Java Persistence API  Bean Validation  Expression Language  Reflexão  Annotations
    25. 25. Arquitetura
    26. 26. API Entities para UI
    27. 27. Infraestrutura para UI
    28. 28. BoundedControls
    29. 29. Filtragem
    30. 30. API Entities para persistênciapublic 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)}
    31. 31. API Entities para segurança
    32. 32. Implementação da arquitetura
    33. 33. Criando o Domain Model
    34. 34. Prototipação
    35. 35. 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;} }
    36. 36. 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; }
    37. 37. Instanciando o Domain Model
    38. 38. Instanciando o Domain Model
    39. 39. Mapeamento Objeto-User Interface
    40. 40. 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 {
    41. 41. 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
    42. 42. 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
    43. 43. 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
    44. 44. Trabalhos futuros  Upgrade da NOVL  Relatórios  Módulo de Testes  Outras plataformas
    45. 45. Perguntas? “A simplicidade é o último grau de sofisticação” Leonardo da Vinci.

    ×