O documento discute o desenvolvimento de software focado no domínio de negócios usando os padrões Naked Objects e Domain-Driven Design. Ele propõe a linguagem NOVL para mapear objetos de domínio para interfaces do usuário personalizadas e o framework Entities para estender o padrão Naked Objects com múltiplas visões por objeto e aplicações transientes. O documento também descreve como a abordagem proposta pode levar a interfaces consistentes, código reduzido e um ciclo de desenvolvimento mais rápido.
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”
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).
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
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.
29. Plataforma de desenvolvimento
JEE5
Polimorfismo
JavaServer Faces
Java Persistence API
Bean Validation
Expression
Language
Reflexão
Annotations
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
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...