Projetar Serviços Vítor Braga – [email protected] Objetivos da aula Apresentar os passos necessários para realizar a atividade projetar Serviços Discutir e mostrar o passo a passo para a construção dos artefatos Relembrando ... Visão geral (Exemplo: RUP) Visão geral Requisitos Modelagem do Negócio Especificação do modelo de negócios Analisar serviços Planejamento Projetar Serviços Planejamento Inicial Implementação Avaliação Teste Platform Platform Specific Independent Model (PSM) Model (PIM) Computation Independent Model (CIM) MDA Terms S O A M D E Fluxo de Atividades Fluxo de Atividades Passos para Identificar Serviços 1. Empacotar Casos de Uso 2. Construir Arquitetura de Serviços 3. Identificar Serviços de Entidades 5. Revisar Resultados Desbloquear Talões de Cheque Efetuar Login Solicitar Talões de Cheque Alterar Senha Consultar Cheques ClienteAtor Consultar Saldo <<include>> <<include>> Realizar DOC Consultar Extrato Realizar Transferência Consultar Qualiti Card Efetuar Pagamento do Qualiti Card Operadora do DOC Operadora Cartão de Crédito Mostrar Dados da Consulta Controle de Acesso Controle Cheque Controle Conta Realizar Transferência ClienteAtor Realizar Doc Operadora Doc Controle Qualit Card Operadora de Cartão de Crédito Controle de Acesso Controle Cheque Controle Conta ClienteAtor Realizar Doc Operadora Doc Controle Qualit Card Operadora de Cartão de Crédito Services Contracts <<Service Contract>> Controle de Cheque consumer <<Service Contract>> Realiazar Transferencia consumer consumer <<participant>> Operadora Cartão provider <<participant>> Sistema back-end provider consumer consumer provider comsumer <<Service Contract>> Controle de Acesso <<consumer>> Cliente Front-end <<Service Contract>> Servico Operadora Cartao provider <<Service Contract>> Controle de Conta provider <<Service Contract>> Servico Operadora Doc provider <<Service Contract>> Controle Qualiti Card <<Service Contract>> Relizar Doc consumer provider <<participant>> Operadora DOC 3. Identificar Serviços de entidades Conta <<Service Contract>> Serviço Conta ContaintInternet <<Service Contract>> Serviço Conta Internet PagamentoCartão Comprovante <<Service Contract>> Serviço PagamentoCartão Interação dos Serviços Sistemática “semelhante” Distribuir comportamento entre as classes Para cada Serviço (service contract) Diagrama de seqüência (coreografia dos serviços) Surgimento de novas entidades Atualizar negócio o Modelo de Informação do : Serviço Conta Internet : Controle de Acesso : Cliente Front-end 1 : logar(login,senha) 2 : existe(login, senha) 3 : ContaInternet 4 : sessão 5 : alterarSenha(login,senhaAntiga, SenhaNova) 6 : existe(login,senha) 7 : ContaInternet 8 : atualizar(ContaInternet) 9 : Conta Internet 10 : sessão Modelo de informação atualizado Conta +numero +saldo ContaintInternet +login +senha PagamentoCartão +numero da fatura +data +valor +numero da conta Modelo de Componentes dos serviços <<Service Contract>> ServiçoControleAcesso Componente Controle de Acesso +logar(login, senha) +alterarSenha(login, senhaAntiga, senhaNova) <<Service Contract>> Servico Cadastro ContaInternet +existe(login, senha) +atualizar(login, senha) Componente Cliente Front-end <<Service Contract>> ServicoQualitiCard +EfetuarpagamentoQualitCard() Componente Qualiti Card <<Service Contract>> Servico Operadora Cartao +enviar() <<Service Contract>> Serviço Cadastro ContaBancaria <<Service Contract>> Serviço Pagamento cartão Com Platform Platform Specific Independent Model (PSM) Model (PIM) Computation Independent Model (CIM) MDA Terms S O A M D E Projetar Serviços Fluxo de Atividades Projetar Arquitetura 1. 2. Refinar Análise de Serviços Definir Padrão de Arquitetura 1. Refinar Análise de Serviços Baseado no: Conhecimento do negócio Modelo de interação dos serviços Modelo de Componentes dos serviços Analisar se os contratos de serviços e componentes identificados até o momento Empacotamento foi correto? Todos os componentes de front-end foram identificados ? Podemos “agrupar” serviços semelhantes? Todas as capacidades foram identificadas? Controle de Acesso Controle Cheque Controle Conta Realizar Transferência ClienteAtor Realizar Doc Operadora Doc Controle Qualit Card Operadora de Cartão de Crédito Controle de Acesso Controle Cheque Controle Conta ClienteAtor Realizar Doc Operadora Doc Controle Qualit Card Operadora de Cartão de Crédito <<Service Contract>> ServiçoControleAcesso Componente Controle de Acesso +logar(login, senha) +alterarSenha(login, senhaAntiga, senhaNova) <<Service Contract>> Servico Cadastro ContaInternet +existe(login, senha) +atualizar(login, senha) Componente Cliente Front-end <<Service Contract>> ServicoQualitiCard +EfetuarpagamentoQualitCard() Componente Qualiti Card <<Service Contract>> Servico Operadora Cartao +enviar() <<Service Contract>> Serviço Cadastro ContaBancaria <<Service Contract>> Serviço Pagamento cartão Com Componente Cliente Front-end <<Service Contract>> ServicoQualitiCard <<Service Contract>> ServiçoControleAcesso +EfetuarpagamentoQualitCard() +logar(login, senha) +alterarSenha(login, senhaAntiga, senhaNova) Componente Qualiti Card <<Service Contract>> Serviço Pagamento cartão Componente Controle de Acesso <<Service Contract>> Serviço Cadastro ContaBancaria <<Service Contract>> Servico Cadastro ContaInternet +existe(login, senha) +atualizar(login, senha) Componente Pagamento cartão <<Service Contract>> Servico Operadora Cartao +enviar() Componente Cadastro ContaBancaria Compoente Operadora Cartão Componente ContaInternet 2. Definir Padrão de Arquitetura O arquiteto pode seguir um padrão já existente para estruturar a aplicação O arquiteto também pode definir novos padrões ou atualizar orientações já existentes Identificar oportunidades de reuso: serviços e componentes disponíveis no mercado Serviços e componentes de aplicações já desenvolvidas Serviços e componentes que podem se tornar reusáveis para outros projetos Projetar Arquitetura 1. Refinar Análise de Serviços 2. Definir Padrão de Arquitetura 2. Definir Padrão de Arquitetura O Arquiteto deve levar em consideração as tecnologias que serão usadas: Ex: .net, java, flash, C++ Todos os serviços com a mesma tecnologia Como será a integração do Front e back-end Necessidades do negócio Além do sistema web Acessado por Iphone e desktop (windows, mac e linux) O ambiente de produção é ser Windows Server 2003 com .net framework 2.0 e banco de dados sql server 2005 Definição da Arquitetura Interface web=> ASP.NET Iphone=> Aplicação Desktop=> aplicação Java Integração com o front-end será feito via web service Os componentes serão implementados do zero Os componentes de acesso a dados deverão implementar o padrão Repositório <<Front-end>> Front-end Web <<front-end>> Front-end Iphone <<Front-end>> Desktop IFachadaWebServices FachadaWebservice IServicoControleAcesso IServicoQualitCard +logar(login, senha) +alterarSenha(login, senhaAtual, SenhaNov +EfetuarpagamentoQualitCard() Componente Qualiti Card Componente Controle de Acess IServicoOperadoraCartao +enviar() oente Operadora Cartão ICadastroContaBancaria +inserir() +remover() +atualizar() +consultar() Componente Cadastro ContaBancaria ICadastroTransacao +ConsultarSaldo() +ConsultarExtrato() +RealizarTransferencia() Compoente Cadastrotransacao ICadastroContaInternet +inserir(ContaInternet) +remover(ContaInternet) +atualizar(ContaInternet) +existe(login, senha) Componente ContaInternet O que aconteceria se todos os componentes fossem implementados como serviços? Fluxo de Atividades Projetar Back-end 1. 2. 3. 4. Projetar Componentes Atualizar Modelo de Informação Agrupar classes Projetar Classes e Banco de dados Projetar componentes Para 1. 2. 3. cada componente: Definir padrões de projetos utilizados Fazer Diagrama de classes Fazer Diagrama de sequência para todas as operação de sua interface <<Front-end>> Front-end Web <<front-end>> Front-end Iphone <<Front-end>> Desktop IFachadaWebServices FachadaWebservice IServicoControleAcesso IServicoQualitCard +logar(login, senha) +alterarSenha(login, senhaAtual, SenhaNov +EfetuarpagamentoQualitCard() Componente Qualiti Card Componente Controle de Acess IServicoOperadoraCartao +enviar() oente Operadora Cartão ICadastroContaBancaria +inserir() +remover() +atualizar() +consultar() Componente Cadastro ContaBancaria ICadastroTransacao +ConsultarSaldo() +ConsultarExtrato() +RealizarTransferencia() Compoente Cadastrotransacao ICadastroContaInternet +inserir(ContaInternet) +remover(ContaInternet) +atualizar(ContaInternet) +existe(login, senha) Componente ContaInternet Diagrama de classe: Fachada Webservice FachadaWebservice IFachadaWebServices +efetuarpagamentoQualitCard() +logar() +alterarSenha() +logar() +efatuarPagamentoQualitCard() +alterarSenha() IServicoQualitCard +EfetuarpagamentoQualitCard() IServicoControleAcesso +logar(login, senha) +alterarSenha(login, senhaAtual, SenhaNova) <<Front-end>> Front-end Web <<front-end>> Front-end Iphone <<Front-end>> Desktop IFachadaWebServices FachadaWebservice IServicoControleAcesso IServicoQualitCard +logar(login, senha) +alterarSenha(login, senhaAtual, SenhaNov +EfetuarpagamentoQualitCard() Componente Qualiti Card Componente Controle de Acess IServicoOperadoraCartao +enviar() oente Operadora Cartão ICadastroContaBancaria +inserir() +remover() +atualizar() +consultar() Componente Cadastro ContaBancaria ICadastroTransacao +ConsultarSaldo() +ConsultarExtrato() +RealizarTransferencia() Compoente Cadastrotransacao ICadastroContaInternet +inserir(ContaInternet) +remover(ContaInternet) +atualizar(ContaInternet) +existe(login, senha) Componente ContaInternet Diagrama de classes: Componente Controle de acesso ServicoControleAcesso +logar(login, senha) +alterarSenha(login, senhaAtual, SenhaNova) IServicoControleAcesso +logar(login, senha) +alterarSenha(login, senhaAtual, SenhaNova) ICadastroContaInternet +inserir(ContaInternet) +remover(ContaInternet) +atualizar(ContaInternet) +existe(login, senha) ContaintInternet +login +senha Compoente Controle de acesso: Efetuar Login : FachadaWebservice : ICadastroContaInternet : ServicoControleAcesso 1 : logar() 2 : existe() <<Front-end>> Front-end Web <<front-end>> Front-end Iphone <<Front-end>> Desktop IFachadaWebServices FachadaWebservice IServicoControleAcesso IServicoQualitCard +logar(login, senha) +alterarSenha(login, senhaAtual, SenhaNov +EfetuarpagamentoQualitCard() Componente Qualiti Card Componente Controle de Acess IServicoOperadoraCartao +enviar() oente Operadora Cartão ICadastroContaBancaria +inserir() +remover() +atualizar() +consultar() Componente Cadastro ContaBancaria ICadastroTransacao +ConsultarSaldo() +ConsultarExtrato() +RealizarTransferencia() Compoente Cadastrotransacao ICadastroContaInternet +inserir(ContaInternet) +remover(ContaInternet) +atualizar(ContaInternet) +existe(login, senha) Componente ContaInternet Diagrama de classes ServicoCadastroContaInternet ICadastroContaInternet +inserir(ContaInternet) +remover(ContaInternet) +atualizar(ContaInternet) +existe(login, senha) RepositorioContaInternetBDR IRepositorioContaInternet +inserir(ContaInternet) +remover(ContaInternet) +atualizar(ContaInternet) +existe(login, senha) Diagrama de sequencia : ServicoControleAcesso : ServicoCadastroContaInternet 1 : existe() : RepositorioContaInternetBDR 2 : existe() Projetar componentes Para 1. 2. 3. 4. cada componente: Definir padrões de projetos utilizados Fazer Diagrama de classes Fazer Diagrama de sequência para todas as operação de sua interface Agrupar classes em pacotes Diagramas de Seqüência Fazer Diagrama de seqüência para todas as operação das interfaces dos componentes Para facilitar o entendimento, fazer o fluxo completo para as operações da Fachada Logar (Completo) : IServicoControleAcesso : FachadaWebservice 1 : logar() : ICadastroContaInternet 2 : existe() : IRepositorioContaInternet 3 : existe() IFachadaWebServices FachadaWebservice IServicoQualitCard +efetuarpagamentoQualitCard() +logar() +alterarSenha() IServicoControleAcesso +logar(login, senha) +alterarSenha(login, senhaAtual, SenhaNova) +EfetuarpagamentoQualitCard() ServicoControleAcesso ServicoQualitCard +logar(login, senha) +alterarSenha(login, senhaAtual, SenhaNova) ICadastroContaBancaria ICadastroContaInternet IServicoOperadoraCartao IServiçoCadastroTransaçoes FachadaOperadoraCartão CadastroTransacoes CadastroContaBancaria IRepositorioTransacoesBDR IRepositorioContaBancariaBDR RepositorioTransacoesBDR RepositorioContaBancariaBDR CadastroContaInternet IRepositorioContaInternet RepositorioContaInternetBDR Projetar Back-end 1. 2. 3. Projetar Componentes Atualizar Modelo de Informação Projetar Classes e Banco de dados Modelo de Informação ContaBancaria ContaintInternet 1 +numero +saldo 1 +login +senha 1 0..* Transacao +numero da fatura +data +valor +numero da conta 1 1 Comporavante PagamentoCartao +numeroFatura Projetar Back-end 1. 2. 3. 4. Projetar Componentes Atualizar Modelo de Informação Agrupar classes Projetar Classes e Banco de dados Fluxo de Atividades Projetar Front-end Baseado no protótipo da interface, tecnologias utilizadas e integração frontback end: Diagrama de classe Diagramas de sequencia Front-end <<Front-end>> Front-end Web <<front-end>> Front-end Iphone IFachadaWebServices FachadaWebservice <<Front-end>> Desktop TelaLogin +loginText: TextBox +senhaText: TextBox +entrarButton: Button +efetuarlogin() Front-end: web TelaLogin +loginText: TextBox +senhaText: TextBox +entrarButton: Button +efetuarlogin() FachadaWebservice IFachadaWebServices +logar() +efatuarPagamentoQualitCard() +alterarSenha() +efetuarpagamentoQualitCard() +logar() +alterarSenha() Front-end: web : IFachadaWebServices : TelaLogin : ClienteAtor 1 : efetuarlogin() 2 : logar() 3 : registrarSessao() Front-end <<Front-end>> Front-end Web <<front-end>> Front-end Iphone IFachadaWebServices FachadaWebservice <<Front-end>> Desktop TelaLogin +loginText: TextField +senhatext: TextField +logarButton: JButton +logar() Diagrama de Classes TelaLogin +loginText: TextField +senhatext: TextField +logarButton: JButton +logar() ComunicacaoWebService +logar() IComunicacaoWebService Diagrama de Sequencia : TelaLogin : ClienteAtor : ComunicacaoWebService 1 : efeturarLoginr() 2 : logar() 3 : callWebService() Dúvidas ?