Framework Entities - Apresentação da Defesa da Dissertacao

Preview:

Citation preview

Marcius Gomes Brandão

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

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

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

Introdução

50% do código e tempo de desenvolvimento

70% do código é de

infraestrutura

Maior complexidade esta no domínio

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

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

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

Projetos com e-Kanban e Burndown:

Um Relato de Experiência”

“Domain-Driven Design

using Entities Framework”

Referencial teórico

Naked Objects

Domain-DrivenDesign

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

Princípios NOP

Completude comportamental

Implementação genérica de serviços

UIs 100% geradas automaticamente

Único ponto de definição :Domain Model

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

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.

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

NOVL : Mestre-Detalhe

NOVL: Estudo de caso

Usando NOVL

Arquitetura

Plataforma de desenvolvimento

JEE5

Polimorfismo

JavaServer Faces

Java Persistence API

Bean Validation

ExpressionLanguage

Reflexão

Annotations

Arquitetura

API Entities para UI

Infraestrutura para UI

BoundedControls

Filtragem

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

}

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

}

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.