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