Implementando a
Arquitetura de
Referência OpenEdge
(OERA) - Parte I
Alessandro Martins
Technical Architect
Field Services Latin America Operations
Agenda



Simplify your business

Introduzindo a implementação de
referência
Business Entities e Data Access Objects
Pontos de discussão sobre Lógica de
Negócio
Conclusões
2
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Moderna Arquitetura de Aplicações
OpenEdge Reference Architecture – uma visão em
camadas
Usuários
Camadas de apresentação
e integração separadas
Simplify your business
Lógica de negócio
comum com modelos
avançados
Acesso a dados
abstraído
do repositório
3
© 2005 Progress Software Corporation
Camada de
Apresentação
Serviços
Corporativos
Camada de
Integração
Camada de Serviços de Negócio
Camada de Acesso a Dados
Repositório
de Dados Gerenciado
Repositório
de Dados
Não-gerenciado
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Quais são os objetivos da
Implementação de Referência?


Simplify your business

4
Prover um entendimento da OpenEdge
Reference Architecture pela descrição de
uma implementação de exemplo
Auxiliar na compreensão das melhores
práticas no uso dos recursos do
OpenEdge
Motivar arquitetos e desenvolvedores a
pensar em aplicar a Arquitetura em seus
próprios projetos
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
O que não são objetivos?



Simplify your business

5
Não se trata de um novo framework
Não pretende ser abrangente ou cobrir
todos os casos possíveis para a aplicação
Não possui a intenção de ser
comercializado
Não possui a intenção de ser utilizado
sem mudanças, extensões ou estudo
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Como devo usar a Implementação de
Referência?


Simplify your business

6
Use-a para aprender os conceitos da
Arquitetura mais profundamente
Use-a para aprender como melhor utilizar
os constructos do Progress 4GL e outros
recursos
Considere-a como um ponto de partida
potencialmente útil no desenvolvimento
de aplicações sobre OpenEdge 10
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Que recursos estão disponíveis?
- Artigos e Códigos de Exemplo
Simplify your business
1. Introduction
2. Business Entities and Data Access Objects
3. The Service Interface Layer
4. Using Advanced ProDataSet Language Features
5. Using an Unmanaged Data Store
6. Building a .NET™ Interface to Business Entities
7. Advanced Business Logic Issues
8. Context Management
9. Building a WebSpeed® User Interface
10. …
7
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
O que há na base de código da
Implementação de Referência?

Diretório Templates
– Procedures de modelo para BE’s, DAO’s etc.

Diretório Support
– Super-procedures e procedures em geral para
apoio

Diretório Samples
Simplify your business
– Exemplos dos códigos presentes nos artigos
– Usam a base sports2000 mas não há nada
específico sobre bases de dados em qualquer
código
8
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Onde eu encontro tudo isto?

Os artigos e o código de exemplo estão
no site do PSDN:
– psdn.progress.com/library/product_info/
oera/index.ssp

Simplify your business

9
Há atualizações em andamento
Material em vias de lançamento
descreverá as melhores práticas para se
usarOpenEdge 10.1 e seus recursos
OO4GL
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Simplify your business
10
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Agenda



Simplify your business

Introduzindo a implementação de
referência
Business Entities e Data Access Objects
Pontos de discussão sobre Lógica de
Negócio
Conclusões
11
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
O Business Entity e o Data Access
Object na Arquitetura
Serviços
Corporativos
Usuários
Camada
de Apresentação
Business
Entity
Simplify your business
Data
Access
Object
Camada de Serviços de Negócio
Camada de Acesso a Dados
Repositório
de
Dados Gerenciado
12
© 2005 Progress Software Corporation
Camada de
Integração
Repositório
de
Dados Não-gerenciado
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Business Entity


Simplify your business

Gerencia a visão lógica, interna dos dados da
aplicação
– Fornece dados para a interface com o usuário e
outras camadas de integração
– Contém lógica de negócio
Dados são melhor representados como ProDataSets
e suas temp-tables
O Business Entity é o valor central da construção de
aplicações em OpenEdge
IU
Business
API
Entity
lógico
13
© 2005 Progress Software Corporation
Data Access
API
Object
BB
físico
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Data Access Object

Simplify your business

Gerencia o repositório de dados físico
– Entende o esquema e outras descrições dos
dados físicos
– Mapeia entre a visão física e a visão lógica
Todas as referências a dados físicos devem estar
confinados ao Data Access Object
IU
Business
API
Entity
lógico
14
© 2005 Progress Software Corporation
Data Access
API
Object
BD
físico
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
O ProDataSet como um Bloco de
Construção
ProDataSet
Data-Source1
Query…
Base de Dados
Customer
Lift Line Skiing
Urpon Frisbee
Hoops Croquet
Q1 for
Customer
Field Map
CustNum
Name
Contact
CustomerTT
1 Lift Line Skiing
2 Urpon Frisbee
3 Hoops Croquet
Order
1
2
3
53
81
66
Data-Relation1
01/01/93
01/04/93
01/04/93
Data-Source2
Query…
Q2 for
Order
Field Map
OrderNum
CustNum
OrderDate
OrderTT
6
36
79
1
1
1
01/05/93
01/19/93
02/10/93
Event Logic
Simplify your business
Dataset:Before-fill
Buffer:Before-fill
Before-row-fill
Row-Add
Row-Delete
…
15
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Construindo os Objetos –
Definição das Temp-tables
Definir temp-tables para as definições
lógicas dos dados

– Cada temp-table em seu próprio arquivo de
include
DEFINE TEMP-TABLE eOrder
etOrder.i
FIELD OrderNum…
DEFINE TEMP-TABLE eOrderLine
Simplify your business
FIELD OrderNum…
etOrderLine.i
FIELD LineNum…

16
Separar definições físicas das lógicas
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Linhas mestras para Definições das
Temp-table

Prefixo do nome da tabela: e

– Por exemplo:




Prefixo do nome do arquivo
de include: et
– etCustomer.i
Renomear campos para
consistência ou melhorar
compreensão
Remover elementos:
Simplify your business
– Campos
– Índices
17

eCustomer
© 2005 Progress Software Corporation


Adicionar outros campos
provenientes de Joins
Adicionar campos
calculados que possam ser
requeridos por facilidade de
uso
Adicionar BEFORE-TABLE ao
final da definição no caso de
se fazer alterações
Não usar a sintaxe LIKE
– Temp-table LIKE
database-table
– Field LIKE database-field
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Simplify your business
TEMP-DB Maintenance Tool (10.0B)
18
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Construindo os Objetos –
Data-Source Objects

Construir as procedures correspondentes
aos objetos de Data-Source
– Cada objeto mapeia uma temp-table ao
dado físico correspondente.
DEFINE DATA-SOURCE srcOrder
etOrder.i
FOR QUERY qOrder.
sceOrder.p
ATTACH-DATA-SOURCE()
etOrderLine.i
DEFINE DATA-SOURCE srcOrderLine
sceOrderLine.p
FOR BUFFER OrderLine.
Simplify your business
ATTACH-DATA-SOURCE()
Base de Dados
da Aplicação
19
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Construindo os Objetos –
Definições dos ProDataSets

Definir ProDataSets para conjuntos de
dados relacionados
– Cada ProDataSet é a base para um
Business Entity
DEFINE DATASET dsOrder
FOR eOrder, eOrderline…
dsOrder.i
etOrder.i
Simplify your business
etOrderLine.i
20
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Construindo os Objetos –
Data Access Object

Construir os Data Access Objects para o
ProDataSet
– Gerencia todos os Data-Source Objects
daOrder.p
sceOrder.p
dsOrder.i
Simplify your business
sceOrderLine.p
21
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Todos os componentes de acesso a
dados juntos
daOrder.p
{dsOrder.i}
{daEntity.i}
SUPER
daSupport.p
initDataSources:
sceOrder.p
DEF DATA-SOURCE
ATTACH-DATA-SOURCE
RowFill handler
sceOrderLine.p
DEF DATA-SOURCE
ATTACH-DATA-SOURCE
SUPER
Simplify your business
sceItem.p
DEF DATA-SOURCE
ATTACH-DATA-SOURCE
SUPER
22
Base de
Dados da
Aplicação
daOrderValidate.p
(opcional)
eOrderLineModifyBeginTrans:
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Construindo os Objetos –
Business Entities

Construir um Business Entity para cada ProDataSet
– Lida com a lógica de negócio sobre os dados lógicos.
– Define a API para acesso a partir de outros objetos.
dsOrder.i
DEFINE DATASET dsOrder
FOR eOrder, eOrderline…
Simplify your business
etOrder.i
etOrderLine.i
BusinessLogic:
END PROCEDURE.
23
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Componenets Business Entity
Juntos
dsOrder.i
beOrder.p
{etOrder.i}
{etOrderLine.i}
{etItem.i}
{dsOrder.i}
{beEntity.i}
beEntity.i
DEFINE DATASET…
RUN daOrder.p
beSupport.p
fetchCustom
saveChanges
Simplify your business
SUPER
SUPER
beOrderValidate.p
(optional)
eOrderLineModifyPreTrans:
Data
Access
Object
24
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Agenda



Simplify your business

Introduzindo a implementação de
referência
Business Entities e Data Access Objects
Pontos de discussão sobre Lógica de
Negócio
Conclusões
25
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Pontos de discussão sobre lógica dos
Business Entities

Quão estritamente devo aderir à separação de
lógicas?
– Devo usar uma chamada de API apenas para um
CAN-FIND?
– Devo deferir isto a uma trigger de base de dados?

Simplify your business


26
Quanto do comportamento padrão deve ser
automatizado por “mágica”?
Como eu ajusto a lógica para permitir reuso de
tabelas por parte de outros ProDataSets?
Qunado eu devo usar referências a temp-tables
ou ProDataSets estáticas ou dinâmicas?
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Acessando outras Entities
através de suas APIs

Evitar acesso direto à base de dados para outras
tabelas a partir de seus Business Entities
Simplify your business
FIND eOrder WHERE eOrder.OrderNum = eOrderLine.OrderNum
{&NoError}.
hCustomer = SIfindRow("Customer", "eCustomer", "CustNum",
STRING(eOrder.CustNum)) .
IF hCustomer:BUFFER-FIELD("Discount"):BUFFER-VALUE < .35
THEN
DO:
ASSIGN BUFFER eOrderLine:ERROR = YES
BUFFER eOrderLine:ERROR-STRING =
"Line " + STRING(eOrderLine.LineNum) +
": Changes not allowed … ".
RETURN.
END.
27
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Comportamento “Mágico” Padrão

Procedures de callback chamadas através de
uma convenção de nomenclatura
PROCEDURE initDataSources :
Simplify your business
IF LOOKUP(phDataSet:NAME + "BeforeFill", cEntries) NE 0
THEN
phDataSet:SET-CALLBACK-PROCEDURE
("BEFORE-FILL", phDataSet:NAME + "BeforeFill",
TARGET-PROCEDURE).
IF LOOKUP(phDataSet:NAME + "AfterFill", cEntries) NE 0
THEN
phDataSet:SET-CALLBACK-PROCEDURE
("AFTER-FILL", phDataSet:NAME + "AfterFill",
TARGET-PROCEDURE).
28
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Organizando a Lógica para Máximo
Reuso

Lógica que referencia mais de uma tabela no
ProDataSet
– Deveria ser colocada dentro do próprio Data
Access Object
PROCEDURE eOrderLineAfterFill:
DEFINE INPUT PARAMETER DATASET FOR dsOrder.
DEFINE VARIABLE dTotal
AS DECIMAL NO-UNDO.
FOR EACH OrderLine WHERE OrderLine.OrderNum =
Simplify your business
eOrder.OrderNum:
dTotal = dTotal + OrderLine.ExtendedPrice.
END.
eOrder.OrderTotal = dTotal.
END PROCEDURE.
29
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Código Estático X Código Dinâmico

Referências dinâmicas às temp-tables
permitem reutilização
Simplify your business
PROCEDURE eItemAfterRowFill:
DEFINE INPUT PARAMETER DATASET-HANDLE phDataSet.
….
hItemName = phDataSet:GET-BUFFERHANDLE("eItem"):BUFFER-FIELD("ItemName").
DO iType = 1 TO NUM-ENTRIES(cItemTypes):
cType = ENTRY(iType, cItemTypes).
IF INDEX(hItemName:STRING-VALUE, cType) NE 0 THEN
hItemName:BUFFER-VALUE =
REPLACE(hItemName:BUFFER-VALUE, cType, cType).
END.
END PROCEDURE.
30
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Agenda



Simplify your business

Introduzindo a implementação de
referência
Business Entities e Data Access Objects
Pontos de discussão sobre Lógica de
Negócio
Conclusões
31
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Resumindo...




Simplify your business

32
Examinar os materiais da implementaçãoexemplo como base para aprendizado e
discussão
Utilizar as partes úteis
Estender ou substituir parter para seus
própositos
Deve-se esperar que continue crescendo e
mudando
Não se deve esperar que seja
completamente (ou mesmo formalmente)
suportado
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Simplify your business
Perguntas?
33
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Simplify your business
Grato pelo
seu tempo!
34
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Simplify your business
35
© 2005 Progress Software Corporation
Implementando a Arquitetura de Referência OpenEdge (OERA) - Parte I
Download

Simplify your business