52
Marcius Gomes Brandão Orientadora: Prof. Dra. Mariela Inés Cortés Co-orientação : Prof. Msc. Ênyo J. T. Gonçalves

Framework Entities - Apresentação da Defesa da Dissertacao

Embed Size (px)

Citation preview

Page 1: Framework Entities - Apresentação da Defesa da Dissertacao

Marcius Gomes Brandão

Orientadora: Prof. Dra. Mariela Inés Cortés

Co-orientação : Prof. Msc. Ênyo J. T. Gonçalves

Page 2: Framework Entities - Apresentação da Defesa da Dissertacao
Page 3: Framework Entities - Apresentação da Defesa da Dissertacao

Mudanças são inevitáveis

Mudanças são consideradas

fáceis

Software não é construído, e sim

desenhado

Trabalho repetitivo é

automatizado

Desenvolvimento de Software é

pesquisa

Requisitos são incompletos

Software é Complexo

Software é Abstrato

Melhores práticas não estão maduras

Tecnologia muda rapidamente

Experiência em tecnologia é incompleta

Tecnologia é vasta

Introdução

Softwares são complexos!

Stepanek,2005

Page 4: Framework Entities - Apresentação da Defesa da Dissertacao

Introdução

50% do código e tempo de desenvolvimento

70% do código é de

infraestrutura

Maior complexidade esta no domínio

Page 5: Framework Entities - Apresentação da Defesa da Dissertacao

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

Page 6: Framework Entities - Apresentação da Defesa da Dissertacao

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

Page 7: Framework Entities - Apresentação da Defesa da Dissertacao

Metodologia: Embasamento teórico

Naked ObjectsRichard Pawson and

Robert Matthews, Wiley 2002

Applying Domain-Driven Design and PatternsJimmy Nilsson, Addison-Wesley,2006

Domain-Driven DesignEric Evans,Addison–Wesley,2004.

About FaceAlan Cooper,Wiley Publishing 2007

Page 8: Framework Entities - Apresentação da Defesa da Dissertacao

Metodologia: Projetos Reais

Page 9: Framework Entities - Apresentação da Defesa da Dissertacao

Metodologia: Estudos de Caso

Page 10: Framework Entities - Apresentação da Defesa da Dissertacao

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

Projetos com e-Kanban e Burndown:

Um Relato de Experiência”

“Domain-Driven Design

using Entities Framework”

Page 11: Framework Entities - Apresentação da Defesa da Dissertacao
Page 12: Framework Entities - Apresentação da Defesa da Dissertacao

Referencial teórico

Naked Objects

Domain-DrivenDesign

Page 13: Framework Entities - Apresentação da Defesa da Dissertacao

Naked Objects Architectural Pattern

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

O problema : quando os requisitos

mudam, geralmente temos que

propagar essas alterações

manualmente para as outras três

camadas (LÄUFER,2008).

Alterações no domínio se propagam

automaticamente para a interface do

usuário e as camadas de persistência

(PAWSON,2008).

Page 14: Framework Entities - Apresentação da Defesa da Dissertacao

Princípios NOP

Completude comportamental

Implementação genérica de serviços

UIs 100% geradas automaticamente

Único ponto de definição :Domain Model

Page 15: Framework Entities - Apresentação da Defesa da Dissertacao

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).

Page 16: Framework Entities - Apresentação da Defesa da Dissertacao

Domain-Driven Design (DDD)

Page 17: Framework Entities - Apresentação da Defesa da Dissertacao
Page 18: Framework Entities - Apresentação da Defesa da Dissertacao

Comparativo dos frameworks

Page 19: Framework Entities - Apresentação da Defesa da Dissertacao
Page 20: Framework Entities - Apresentação da Defesa da Dissertacao

NOVL

Layout Grid (Cooper2007) é um esquema em grade que fornece uma estrutura uniforme e consistente para a criação de uma interface com vários níveis de complexidade visual.

Linguagem de descrição de layout

baseada no layoutgrid

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

Page 21: Framework Entities - Apresentação da Defesa da Dissertacao

NOVL : Definição formal

Page 22: Framework Entities - Apresentação da Defesa da Dissertacao

NOVL : Diagramas de sintaxe

Page 23: Framework Entities - Apresentação da Defesa da Dissertacao

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.

'label'É um texto simples que será atribuído ao próximo elemento. No caso de um membro,

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.

Page 24: Framework Entities - Apresentação da Defesa da Dissertacao

NOVL : Mestre-Detalhe

Page 25: Framework Entities - Apresentação da Defesa da Dissertacao

NOVL: Estudo de caso

Page 26: Framework Entities - Apresentação da Defesa da Dissertacao

Usando NOVL

Page 27: Framework Entities - Apresentação da Defesa da Dissertacao
Page 28: Framework Entities - Apresentação da Defesa da Dissertacao

Arquitetura

Page 29: Framework Entities - Apresentação da Defesa da Dissertacao

Plataforma de desenvolvimento

JEE5

Polimorfismo

JavaServer Faces

Java Persistence API

Bean Validation

ExpressionLanguage

Reflexão

Annotations

Page 30: Framework Entities - Apresentação da Defesa da Dissertacao

Arquitetura

Page 31: Framework Entities - Apresentação da Defesa da Dissertacao

API Entities para UI

Page 32: Framework Entities - Apresentação da Defesa da Dissertacao

Infraestrutura para UI

Page 33: Framework Entities - Apresentação da Defesa da Dissertacao

BoundedControls

Page 34: Framework Entities - Apresentação da Defesa da Dissertacao

Filtragem

Page 35: Framework Entities - Apresentação da Defesa da Dissertacao

API Entities para persistência

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)

}

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();

}

Page 36: Framework Entities - Apresentação da Defesa da Dissertacao

API Entities para segurança

Page 37: Framework Entities - Apresentação da Defesa da Dissertacao

Implementação da arquitetura

Page 38: Framework Entities - Apresentação da Defesa da Dissertacao
Page 39: Framework Entities - Apresentação da Defesa da Dissertacao

Criando o Domain Model

Page 40: Framework Entities - Apresentação da Defesa da Dissertacao

Prototipação

Page 41: Framework Entities - Apresentação da Defesa da Dissertacao

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;}

}

Page 42: Framework Entities - Apresentação da Defesa da Dissertacao

Implementação do Domain Model@Entitypublic class Order implements Serializable {@Id @GeneratedValueprivate 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;

}

Page 43: Framework Entities - Apresentação da Defesa da Dissertacao

Instanciando o Domain Model

Page 44: Framework Entities - Apresentação da Defesa da Dissertacao

Instanciando o Domain Model

Page 45: Framework Entities - Apresentação da Defesa da Dissertacao

Mapeamento Objeto-User Interface

Page 46: Framework Entities - Apresentação da Defesa da Dissertacao

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 {

Page 47: Framework Entities - Apresentação da Defesa da Dissertacao
Page 48: Framework Entities - Apresentação da Defesa da Dissertacao

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

Page 49: Framework Entities - Apresentação da Defesa da Dissertacao

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

Page 50: Framework Entities - Apresentação da Defesa da Dissertacao

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

Page 51: Framework Entities - Apresentação da Defesa da Dissertacao

Trabalhos futuros

Upgrade da NOVL

Relatórios

Módulo de Testes

Outras plataformas

Page 52: Framework Entities - Apresentação da Defesa da Dissertacao

Perguntas?

“A simplicidade é o último grau de sofisticação”

Leonardo da Vinci.