A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de.

Apresentações semelhantes


Apresentação em tema: "Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de."— Transcrição da apresentação:

1 Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de Pernambuco

2 Estruturação do Código em Camadas Paulo Borba Objetivo Depois desta aula você será capaz de estruturar o seu código em camadas, de forma a obter melhor reuso e extensibilidade.

3 Vendo o código como uma caixa preta...

4 Vendo o código como palavras cruzadas... G D COMUNICAÇÃO I D NEGÓCIO S

5 Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados

6 Arquitetura em Camadas n Interface com o Usuário u código para a apresentação da aplicação n Comunicação u código para permitir acesso remoto aos serviços da aplicação n Negócio u código inerente à aplicação sendo desenvolvida n Dados u código para acesso e manipulação de dados

7 Negócio Dados

8 Negócio Dados

9 Negócio Comunicação

10 Benefícios da Arquitetura em Camadas n Modularidade e seus benefícios: u Dividir para conquistar u Separação de conceitos u Reusabilidade u Extensibilidade n Mudanças em uma camada não afetam as outras, desde que as interfaces sejam preservadas u plug-and-play

11 Benefícios da Arquitetura em Camadas n Uma mesma versão de uma camada trabalhando com diferentes versões de outra camada: u várias GUIs para a mesma aplicação u vários mecanismos de persistência suportados pela mesma aplicação u várias plataformas de distribuição para acesso a uma mesma aplicação

12 Classes Básicas de Negócio class Conta implements PersistentObject, Serializable { private double saldo; private String numero;... void creditar(double v) { saldo = saldo + v; } void update() {...} void access() {...} }

13 Interfaces Negócio-Dados interface ConjuntoDeContas { void inserir(Conta conta) throws RepositorioException, ContaInvalidaException; void atualizar(Conta conta) throws RepositorioException, ContaInvalidaException; void remover(String num) throws RepositorioException, ContaInvalidaException; Conta procurar(String num) throws RepositorioException; Conta getMaiorSaldo() throws RepositorioException; IteradorContas getIterador(); }

14 Classes Coleção de Dados class ConjuntoDeContasRelacional implements ConjuntoDeContas { private MecanismoPersistencia base; ConjuntoDeContasRelacional(MecanismoDePersistencia mp){ base = mp; }

15 Classes Coleção de Dados void inserir(Conta c) throws RepositorioException, ContaInvalidaException { try{ if (c != null) c.update(); else throw new ContaInvalidaException(); } catch (DBRuntimeException e) { throw new RepositorioException(); }

16 Classes Coleção de Dados void atualizar(Conta c) throws RepositorioException, ContaInvalidaException { Conta conta1; if (c != null) try { conta1 = this.procurar(c.getNumero()); conta1.atualizar(c); conta1.update(); } catch (DBRuntimeException e) { throw new RepositorioException(); } else throw new ContaInvalidaException(); }

17 Classes Coleção de Dados Conta procurar(String num) throws RepositorioException { Conta c; try { c = (Conta) Extent.all("Conta").where("numero=” + num).element(); } catch (DBRuntimeException e) { throw new RepositorioException(); } return c; }

18 Classes Coleção de Negócio class CadastroDeContas { private ConjuntoDeContas contas; void CadastroDeContas(ConjuntoDeContas cContas) { contas = cContas; } void creditar(String num, double val) throws ContaInvalidaException, RepositorioException { Conta c = contas.procurar(num); c.creditar(val); contas.atualizar(c); }

19 Classes Coleção de Negócio void cadastrar(Conta c) throws ContaJaExisteException, ContaInvalidaException, RepositorioException { if (c!=null) { if (contas.existe(c.getNumero())) throw new ContaJaExisteException(); else contas.inserir(c); } else throw new ContaInvalidaException(); }

20 Interface Mecanismo de Persistência interface MecanismoPersistencia { boolean conectar() throws MecanismoPersistenciaException; boolean desconectar() throws MecanismoPersistenciaException; boolean iniciarTransacao() throws MecanismoPersistenciaException; boolean confirmarTransacao() throws MecanismoPersistenciaException; boolean cancelarTransacao() throws MecanismoPersistenciaException; }

21 Classe Mecanismo de Persistência class MecanismoPersistenciaBDR implements MecanismoPersistencia { MecanismoPersistenciaBDR (String tipoConexao, String url, String login, String senha, String classeDoDriver) throws MecanismoPersistenciaException { bd = new Database(tipoConexao,url,login,senha); try { Class.forName(classeDoDriver); } catch(DBRuntimeException e) { throw new MecanismoPersistenciaException(); }

22 Classe Fachada class Banco { private CadastroDeContas contas; private MecanismoDePersistencia bd;... AplicacaoBancaria (CadastroDeContas cadContas,... MecanismoDePersistencia mp) { contas = cadContas;... bd = mp; }

23 Classe Fachada void creditar(String num, double val) throws ContaInexistenteException, RepositorioException { try { bd.iniciarTransacao(); contas.creditar(num,val); bd.confirmarTransacao(); } catch(MecanismoPersistenciaException e){ System.out.println(EXC_CONEXAO); bd.cancelarTransacao(); }

24 Interface da Fachada public interface IBanco { void creditar (String nConta, double valor) throws CommunicationException, ContaInexistenteException, RepositorioException;... }

25 Adaptador Fonte n Isola a GUI da camada de comunicação u obtém referência ao objeto remoto u delega invocação ao objeto remoto u troca exceções RMI por exceção genérica

26 public class BancoSourceRMIAdapter implements IBanco { private BancoTargetRMIAdapter banco; public BancoSourceRMIAdapter() throws CommunicationException{ try { banco = (BancoTargetRMIAdapter) Naming.lookup("//www.di.ufpe.br:2120/BankServer"); } catch (Exception e) { e.printStackTrace(); throw new CommunicationException ( ); } Adaptador Fonte

27 public void creditar(String nConta, double valor) throws CommunicationException, ContaInexistenteException { try { banco.creditar(nConta,valor); } catch (RemoteException e){ throw new CommunicationException(); }

28 Interface do Adaptador Destino public interface IBancoTargetRMIAdapter extends Remote{ void creditar(String nConta, double valor) throws CommunicationException, ContaInexistenteException, RemoteException;... }

29 Adaptador Destino n Isola a camada de negócio da camada de comunicação u faz papel de objeto remoto u faz papel de inicializador u delega invocação de método remoto a método de negócio

30 Adaptador Destino public class BancoTargetRMIAdapter extends UnicastRemoteObject implements IBancoTargetRMIAdapter { private IBanco banco; public BancoTargetRMIAdapter() throws RemoteException, InicializacaoBancoException { banco = new Banco(); } public void creditar(String nConta, double valor) throws RemoteException, CommunicationException, ContaInexistenteException { banco.creditar(nConta, valor); }

31 Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de Pernambuco


Carregar ppt "Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de."

Apresentações semelhantes


Anúncios Google