SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Padrões Arquiteturais

       Sistemas Interativos:
                      MVC
Sistemas Interativos
•  Sistemas atuais apresentam alto grau de
   interação do usuário
•  Desafio: independência do núcleo
   funcional (estável) da interface do usuário
   (adaptáveis)
    – MVC
    – PAC: hierarquia de agentes cooperantes.
      Cada um deles é responsável por um aspecto
      da funcionalidade da aplicação.
2                Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                        Architecture - Buschmann
Model-View-Controller
•  Divide uma aplicação interativa em 3
   componentes:
    – Model: contém o cerne da aplicação e os dados
    – View: mostra a informação para o usuário
    – Controller: trata a entrada do usuário
      •  Juntos, Views e Controllers fazem a interface com o
         usuário
      •  Deve haver um mecanismo de propagação de
         mudanças para assegurar a consistência entre a
         interface e o modelo
3                  Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                          Architecture - Buschmann
Exemplo




4   Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
           Architecture - Buschmann
Contexto
•  Aplicações interativas com uma interface
   homem-computador flexível




5              Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                      Architecture - Buschmann
Problema
•  Sist. interativos são propensos a mundanças
    –  Dif. usuários colocam diferentes requisitos
•  Mesma informação pode ter que ser
   apresentada de forma diferente em diferentes
   janelas
•  A visualização e o comportamento da aplicação
   devem refletir imediatamente os dados
   manipulados
•  Mudanças na interface devem ser fáceis e
   possivelmente em tempo de execução
•  Suportar diferentes padrões de aparência não
   devem afetar o código do núcleo da aplicação
6                    Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                            Architecture - Buschmann
Solução
•  MVC divide uma aplicação interativa em 3
   áreas: processamento, saída e entrada
    –  Componente MODEL: encapsula os dados do núcleo
       da aplicação e sua funcionalidade
    –  Componentes VIEW: mostra as informações para o
       usuário. Obtém-nas do MODEL
    –  Cada componente VIEW tem um componente
       CONTROLLER associado
      •  Recebem a entrada (usualmente eventos)
      •  Eventos são traduzidos em requisições de serviços que são
         enviadas para o MODEL ou para VIEW
      •  O usuário interage com o sistema apenas através dos
         CONTROLLERs

7                    Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                            Architecture - Buschmann
Solução
•  Esta separação possibilita múltiplas visões
   do mesmo modelo
•  Usuário modifica Model via Controller de
   um View
    – Model notifica todos os Views dependentes
      destes dados
    – Views, por sua vez, recuperam dados do
      Model e atualizam a informação para usuário

8                Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                        Architecture - Buschmann
Estrutura
•  Model
    – exporta procedimentos que realizam
      processamento específico da aplicação
      •  Controllers chamam estes procedimentos em
         nome do usuário
    – Provê funções para acesso a seus dados
      •  Usadas pelos Views
    – Usa mecanismo de propagação de mudanças
      •  Views e Controllers se registram

9                  Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                          Architecture - Buschmann
Estrutura
•  Views
     – Cada View define um procedimento de
       atualização (ativado pelo mecanismo de
       propagação de mudanças)
     – Uma vez notificado, obtém dados atuais e os
       atualiza na saída
     – Cada View cria um Controller adequado (1:1)
     – Provê funcionalidades de manipulação da
       saída ao Controller que não afetam o Model
       (p.ex., scrolling)
10                Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                         Architecture - Buschmann
Estrutura
•  Controller
     – Aceita entradas como eventos (depende da
       plataforma da interface)
     – Eventos são traduzidos em requisições ao
       Model ou ao correspondente View
     – Se o comportamento do Controller depende
       do estado do Model
       •  Controller se registra no mecanismo de
          propagação de mudança e implementa um
          procedimento de atualização (ex., habilitar ou
          desabilitar um menu)
11                  Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                           Architecture - Buschmann
Estrutura




12   Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
            Architecture - Buschmann
Dinâmica – Cenário 1
 Entrada do usuário  trigger MPM


                                              *




13         Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                  Architecture - Buschmann
Cenário 2 – Inicialização
         da tríade MVC




14         Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                  Architecture - Buschmann
Implementação
1.  Separar a interface Homem-Máquina do
    núcleo funcional
class Model{                                     / / factory functions for view access to
                                                      data
  List<long> votes;
                                                    Iterator<long> makevoteIterator( ) {
  List<String> parties;
                                                       return Iterator<long> (votes);
public :
                                                    }
  Model(List<String> partyNames);
                                                    Iterator<String> makePartyIterator( )
                                                    {
// access interface for modification by
     controller                                        return Iterator<String>(parties);
    void clearVotes(); // set voting                }
     values to 0
    void changeVote(String                       // ... to be continued
           party, long vote);                    }

15                          Livro Texto: Pattern Oriented Software        Eduardo N. F. Zagari
                                   Architecture - Buschmann
Implementação
2.  Implementar o mecanismo de
    propagação de mudança
     •  Padrão de Projeto Publisher-Subscriber
     •  Estender Model para suportar o registro
     •  Procedimento notificador do Model deve
        chamar procedimento de update nos objetos
        Observer



16                Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                         Architecture - Buschmann
Implementação
class Observer {            // common ancestor for view and controller
      public :
          virtual void update( ) { }
      // default is no-op
};

class Model {
      // ... continued
      public :
           void attach(Observer *s) { registry.add (s) ; }
           void detach (Observer *s) { registry. remove (s) ; }
      protected :
           virtual void notify( );
      private :
           Set<Observer*> registry;
};
17                          Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                                   Architecture - Buschmann
Implementação
void Model::notify ( ) {
  // call update for all observers
  Iterator<Observer*> iter(registry) ;
  while (iter.next()) {
       iter.curr( )->update ( );
  }
}

- notify() é chamado pelos métodos clearVotes() e
   changeVote()

18                   Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                            Architecture - Buschmann
Implementação
3.  Projetar e Implementar os Views
     •  Especificar os proced. (draw) para mostrar o
        componente na tela
     •  Impl. proced. de update (re-draw)
     •  Impl. proced. de inicialização (registro, setup
        do Controller)
         class View : public Observer (
         public:
                  View (Model *m) : myModel (m) , mycontroller (0)
                            { myModel ->attach(this) ; }
                  virtual ~View ( ) ( myModel ->detach (this) ; }
                  virtual void update ( ) { this->draw 0 ; }
19                      Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                               Architecture - Buschmann
Implementação
   // abstract interface to be redefined:
   virtual void initialize( ) ;    // see below
   virtual void draw ( ) ;         // (re-)display view
   Model *getModel( ) { return myModel; }
   Controller *getcontroller( ) { return mycontroller; }
protected:
   Model *myModel ;
   Controller *myController;       // set by initialize
};
class Barchartview : public View {
public:
   BarChartView (Model *m) : View(m) { }
   virtual void draw( ) ;
};
20                       Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                                Architecture - Buschmann
Implementação
void BarChartView::draw ( ) {
    Iterator<String> ip = myModel->makePartyIterator();
    Iterator<long> iv = myModel->makevoteIterator();
    List<long> dl;                //for scaling values to fill screen
    long max = 1;                 // maximum for adjustment

     // calculate maximum vote count
     while (iv.next( )) {
             if (iv.curr( ) > max ) max = iv.curr( ); }
     iv.reset ( ) ;

     // now calculate screen coordinates for bars
     while (iv.next( )) {
             dl.append((MAXBARS1ZE * iv.curr( ))/max); }

     // reuse iterator object for new collection:
     iv = dl; // assignment rebinds iterator to new list
     iv.reset ( ) ;
     while (ip.next( ) && iv.next( )) {
              // draw text: cout << ip.curr 0 << " : " ;
              // draw bar: ... drawbox(BARWIDTH, iv.curr0) ;...
}
21                                     Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                                              Architecture - Buschmann
Implementação
4.  Projete e implemente os Controllers




22             Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                      Architecture - Buschmann
Implementação
5.  Projete e implemente o relacionamento
    View-Controller
     –  Tipicamente, cada View tem o seu Controller
     –  Para criar uma hierarquia de classes, usa-se
        o Padrão Factory.
       •  Define-se um makecontroller() nas classes View,
          para que as subclasses View possam redefinir
          seus Controllers redefinindo o método Factory



23                 Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                          Architecture - Buschmann
Implementação




24     Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
              Architecture - Buschmann
Implementação
6.  Implementar o set-up do MVC




25            Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                     Architecture - Buschmann
Implementação
7.  Criação (gerência) dinâmica de Views
8.  Controllers plugáveis
     •  Diferentes controllers para um View (expert
        versus iniciante ou diferentes dispositivos de
        entrada)
9.  Infra-estrutura para View e Controllers
    hierárquicos


26                 Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                          Architecture - Buschmann
Variante
•  Document-View
     – Relaxamento da separação entre View e
       Controller
     – Ex.: X-Windows System




27                Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                         Architecture - Buschmann
Benefícios
•  Múltiplos Views do mesmo Model
•  Views sincronizados
•  Views e Controllers plugáveis
•  “Permutabilidade” do “look-and-feel”




28             Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                      Architecture - Buschmann
Desvantagens
•    Complexidade maior
•    Potencial para um número excessivo de updates
•    Conexão íntima entre View e Controller
•    Acoplamento de View e Controllers ao Model
•    Ineficiência no acesso de dados no View
•    Mudança inevitável do View e Controller quando
     se porta a aplicação



29                 Livro Texto: Pattern Oriented Software   Eduardo N. F. Zagari
                          Architecture - Buschmann

Mais conteúdo relacionado

Mais procurados

Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasVagner Santana
 
Padrões Arquiteturais - MVC, MVP e MVVM
Padrões Arquiteturais - MVC, MVP e MVVMPadrões Arquiteturais - MVC, MVP e MVVM
Padrões Arquiteturais - MVC, MVP e MVVMAricelio Souza
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Adriano Tavares
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Softwareeros.viggiano
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de softwareAdriano Tavares
 
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
MVC, MVP e MVVM: Uma Comparação de Padrões ArquiteturaisMVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
MVC, MVP e MVVM: Uma Comparação de Padrões ArquiteturaisJorge Tressino Rua
 
Introdução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NETIntrodução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NETMário Meyrelles
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de SoftwareAricelio Souza
 

Mais procurados (20)

Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
 
Arquitetura MVC
Arquitetura MVCArquitetura MVC
Arquitetura MVC
 
Padrões Arquiteturais - MVC, MVP e MVVM
Padrões Arquiteturais - MVC, MVP e MVVMPadrões Arquiteturais - MVC, MVP e MVVM
Padrões Arquiteturais - MVC, MVP e MVVM
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Arquitetura de Sofware
Arquitetura de SofwareArquitetura de Sofware
Arquitetura de Sofware
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de software
 
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
MVC, MVP e MVVM: Uma Comparação de Padrões ArquiteturaisMVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
 
Modelagem 21102006_2
Modelagem 21102006_2Modelagem 21102006_2
Modelagem 21102006_2
 
Modelagem 16102006
Modelagem 16102006Modelagem 16102006
Modelagem 16102006
 
Modelagem 21102006_1
Modelagem 21102006_1Modelagem 21102006_1
Modelagem 21102006_1
 
Introdução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NETIntrodução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NET
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Arquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADAArquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADA
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
MVC MVP MVVM para Web
MVC MVP MVVM para WebMVC MVP MVVM para Web
MVC MVP MVVM para Web
 
BDD2
BDD2BDD2
BDD2
 
Cs 2
Cs 2Cs 2
Cs 2
 

Destaque

Arquitetura de Software Na Pratica
Arquitetura de Software Na PraticaArquitetura de Software Na Pratica
Arquitetura de Software Na PraticaAlessandro Kieras
 
Vssummit 2016 - DDD em cenários corporativos
Vssummit 2016 - DDD em cenários corporativosVssummit 2016 - DDD em cenários corporativos
Vssummit 2016 - DDD em cenários corporativosYan Justino
 
Domain driven design na Prática
Domain driven design na PráticaDomain driven design na Prática
Domain driven design na PráticaDouglas Aguiar
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
Introdução ao Aspnet Core
Introdução ao Aspnet CoreIntrodução ao Aspnet Core
Introdução ao Aspnet CoreYan Justino
 
Arquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and FiltersArquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and FiltersSergio Crespo
 
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOYan Justino
 
Autenticação e Controle de Acesso
Autenticação e Controle de AcessoAutenticação e Controle de Acesso
Autenticação e Controle de AcessoDenis L Presciliano
 
Autenticação e autorização
Autenticação e autorizaçãoAutenticação e autorização
Autenticação e autorizaçãoDouglas Aguiar
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do softwareYan Justino
 
Padrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorPadrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorEduardo Nicola F. Zagari
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryEduardo Nicola F. Zagari
 

Destaque (18)

Arquitetura de Software Na Pratica
Arquitetura de Software Na PraticaArquitetura de Software Na Pratica
Arquitetura de Software Na Pratica
 
Uma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDBUma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDB
 
Classificação de Documentos
Classificação de DocumentosClassificação de Documentos
Classificação de Documentos
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Vssummit 2016 - DDD em cenários corporativos
Vssummit 2016 - DDD em cenários corporativosVssummit 2016 - DDD em cenários corporativos
Vssummit 2016 - DDD em cenários corporativos
 
TDD e BDD
TDD e BDDTDD e BDD
TDD e BDD
 
Domain driven design na Prática
Domain driven design na PráticaDomain driven design na Prática
Domain driven design na Prática
 
Angular
AngularAngular
Angular
 
Iniciando com DDD
Iniciando com DDDIniciando com DDD
Iniciando com DDD
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Introdução ao Aspnet Core
Introdução ao Aspnet CoreIntrodução ao Aspnet Core
Introdução ao Aspnet Core
 
Arquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and FiltersArquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and Filters
 
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
 
Autenticação e Controle de Acesso
Autenticação e Controle de AcessoAutenticação e Controle de Acesso
Autenticação e Controle de Acesso
 
Autenticação e autorização
Autenticação e autorizaçãoAutenticação e autorização
Autenticação e autorização
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do software
 
Padrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorPadrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - Adaptador
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract Factory
 

Semelhante a MVC padrões arquiteturais

ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)Giovanni Bassi
 
Orientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a PraticaOrientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a Praticaelliando dias
 
Orientacao A Objetos Da Teoria A Pratica Em Java
Orientacao A Objetos   Da Teoria A Pratica Em JavaOrientacao A Objetos   Da Teoria A Pratica Em Java
Orientacao A Objetos Da Teoria A Pratica Em Javaelliando dias
 
Orientação a objetos da teoria a prática em java
Orientação a objetos   da teoria a prática em java Orientação a objetos   da teoria a prática em java
Orientação a objetos da teoria a prática em java Fabiano Lima
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2Cezar Souza
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Alexandre Tarifa
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifaguestea329c
 
Apostila supervisorio indusoft ind371
Apostila supervisorio indusoft ind371Apostila supervisorio indusoft ind371
Apostila supervisorio indusoft ind371Sandra Rocha
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
Minicurso code igniter aula 2
Minicurso code igniter   aula 2Minicurso code igniter   aula 2
Minicurso code igniter aula 2lfernandomcj
 
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEMMinicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEMAlisson Solitto
 
Introdução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular jsIntrodução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular jsCloves Moreira Junior
 
White Paper da Spin para o SIMPASE 2013
White Paper da Spin para o SIMPASE 2013White Paper da Spin para o SIMPASE 2013
White Paper da Spin para o SIMPASE 2013SpinEngenharia
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Strutseduan
 

Semelhante a MVC padrões arquiteturais (20)

ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)
 
Orientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a PraticaOrientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a Pratica
 
Orientacao A Objetos Da Teoria A Pratica Em Java
Orientacao A Objetos   Da Teoria A Pratica Em JavaOrientacao A Objetos   Da Teoria A Pratica Em Java
Orientacao A Objetos Da Teoria A Pratica Em Java
 
Orientação a objetos da teoria a prática em java
Orientação a objetos   da teoria a prática em java Orientação a objetos   da teoria a prática em java
Orientação a objetos da teoria a prática em java
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Apostila supervisorio indusoft ind371
Apostila supervisorio indusoft ind371Apostila supervisorio indusoft ind371
Apostila supervisorio indusoft ind371
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
Mvc - Semifinal
Mvc - SemifinalMvc - Semifinal
Mvc - Semifinal
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
Minicurso code igniter aula 2
Minicurso code igniter   aula 2Minicurso code igniter   aula 2
Minicurso code igniter aula 2
 
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEMMinicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
Minicurso WebAPI .NET CORE - SemanaTI2018 - UNIVEM
 
Introdução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular jsIntrodução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular js
 
White Paper da Spin para o SIMPASE 2013
White Paper da Spin para o SIMPASE 2013White Paper da Spin para o SIMPASE 2013
White Paper da Spin para o SIMPASE 2013
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
 

Mais de Eduardo Nicola F. Zagari

Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasEduardo Nicola F. Zagari
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSEduardo Nicola F. Zagari
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxEduardo Nicola F. Zagari
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealEduardo Nicola F. Zagari
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Eduardo Nicola F. Zagari
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Eduardo Nicola F. Zagari
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Eduardo Nicola F. Zagari
 
Padrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyPadrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyEduardo Nicola F. Zagari
 
Padrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - FacadePadrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - FacadeEduardo Nicola F. Zagari
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonEduardo Nicola F. Zagari
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodEduardo Nicola F. Zagari
 

Mais de Eduardo Nicola F. Zagari (20)

Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 
Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes Linux
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo Real
 
Módulo de Estudos em Tempo Real
Módulo de Estudos em Tempo RealMódulo de Estudos em Tempo Real
Módulo de Estudos em Tempo Real
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
 
Padrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyPadrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - Proxy
 
Padrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - FacadePadrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - Facade
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - Singleton
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory Method
 
Padrões-07 - Padrões Criacionais
Padrões-07 - Padrões CriacionaisPadrões-07 - Padrões Criacionais
Padrões-07 - Padrões Criacionais
 
ICC-01 História dos Computadores
ICC-01 História dos ComputadoresICC-01 História dos Computadores
ICC-01 História dos Computadores
 
ICC-02 Evolução dos Computadores
ICC-02 Evolução dos ComputadoresICC-02 Evolução dos Computadores
ICC-02 Evolução dos Computadores
 
ICC-03 Organização dos Computadores
ICC-03 Organização dos ComputadoresICC-03 Organização dos Computadores
ICC-03 Organização dos Computadores
 
ICC-04 Sistemas Numéricos
ICC-04 Sistemas NuméricosICC-04 Sistemas Numéricos
ICC-04 Sistemas Numéricos
 
ICC-05 Álgebra Booleana
ICC-05 Álgebra BooleanaICC-05 Álgebra Booleana
ICC-05 Álgebra Booleana
 
ICC-06 Periféricos - Introdução
ICC-06 Periféricos - IntroduçãoICC-06 Periféricos - Introdução
ICC-06 Periféricos - Introdução
 

MVC padrões arquiteturais

  • 1. Padrões Arquiteturais Sistemas Interativos: MVC
  • 2. Sistemas Interativos •  Sistemas atuais apresentam alto grau de interação do usuário •  Desafio: independência do núcleo funcional (estável) da interface do usuário (adaptáveis) – MVC – PAC: hierarquia de agentes cooperantes. Cada um deles é responsável por um aspecto da funcionalidade da aplicação. 2 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 3. Model-View-Controller •  Divide uma aplicação interativa em 3 componentes: – Model: contém o cerne da aplicação e os dados – View: mostra a informação para o usuário – Controller: trata a entrada do usuário •  Juntos, Views e Controllers fazem a interface com o usuário •  Deve haver um mecanismo de propagação de mudanças para assegurar a consistência entre a interface e o modelo 3 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 4. Exemplo 4 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 5. Contexto •  Aplicações interativas com uma interface homem-computador flexível 5 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 6. Problema •  Sist. interativos são propensos a mundanças –  Dif. usuários colocam diferentes requisitos •  Mesma informação pode ter que ser apresentada de forma diferente em diferentes janelas •  A visualização e o comportamento da aplicação devem refletir imediatamente os dados manipulados •  Mudanças na interface devem ser fáceis e possivelmente em tempo de execução •  Suportar diferentes padrões de aparência não devem afetar o código do núcleo da aplicação 6 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 7. Solução •  MVC divide uma aplicação interativa em 3 áreas: processamento, saída e entrada –  Componente MODEL: encapsula os dados do núcleo da aplicação e sua funcionalidade –  Componentes VIEW: mostra as informações para o usuário. Obtém-nas do MODEL –  Cada componente VIEW tem um componente CONTROLLER associado •  Recebem a entrada (usualmente eventos) •  Eventos são traduzidos em requisições de serviços que são enviadas para o MODEL ou para VIEW •  O usuário interage com o sistema apenas através dos CONTROLLERs 7 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 8. Solução •  Esta separação possibilita múltiplas visões do mesmo modelo •  Usuário modifica Model via Controller de um View – Model notifica todos os Views dependentes destes dados – Views, por sua vez, recuperam dados do Model e atualizam a informação para usuário 8 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 9. Estrutura •  Model – exporta procedimentos que realizam processamento específico da aplicação •  Controllers chamam estes procedimentos em nome do usuário – Provê funções para acesso a seus dados •  Usadas pelos Views – Usa mecanismo de propagação de mudanças •  Views e Controllers se registram 9 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 10. Estrutura •  Views – Cada View define um procedimento de atualização (ativado pelo mecanismo de propagação de mudanças) – Uma vez notificado, obtém dados atuais e os atualiza na saída – Cada View cria um Controller adequado (1:1) – Provê funcionalidades de manipulação da saída ao Controller que não afetam o Model (p.ex., scrolling) 10 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 11. Estrutura •  Controller – Aceita entradas como eventos (depende da plataforma da interface) – Eventos são traduzidos em requisições ao Model ou ao correspondente View – Se o comportamento do Controller depende do estado do Model •  Controller se registra no mecanismo de propagação de mudança e implementa um procedimento de atualização (ex., habilitar ou desabilitar um menu) 11 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 12. Estrutura 12 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 13. Dinâmica – Cenário 1 Entrada do usuário  trigger MPM * 13 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 14. Cenário 2 – Inicialização da tríade MVC 14 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 15. Implementação 1.  Separar a interface Homem-Máquina do núcleo funcional class Model{ / / factory functions for view access to data List<long> votes; Iterator<long> makevoteIterator( ) { List<String> parties; return Iterator<long> (votes); public : } Model(List<String> partyNames); Iterator<String> makePartyIterator( ) { // access interface for modification by controller return Iterator<String>(parties); void clearVotes(); // set voting } values to 0 void changeVote(String // ... to be continued party, long vote); } 15 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 16. Implementação 2.  Implementar o mecanismo de propagação de mudança •  Padrão de Projeto Publisher-Subscriber •  Estender Model para suportar o registro •  Procedimento notificador do Model deve chamar procedimento de update nos objetos Observer 16 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 17. Implementação class Observer { // common ancestor for view and controller public : virtual void update( ) { } // default is no-op }; class Model { // ... continued public : void attach(Observer *s) { registry.add (s) ; } void detach (Observer *s) { registry. remove (s) ; } protected : virtual void notify( ); private : Set<Observer*> registry; }; 17 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 18. Implementação void Model::notify ( ) { // call update for all observers Iterator<Observer*> iter(registry) ; while (iter.next()) { iter.curr( )->update ( ); } } - notify() é chamado pelos métodos clearVotes() e changeVote() 18 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 19. Implementação 3.  Projetar e Implementar os Views •  Especificar os proced. (draw) para mostrar o componente na tela •  Impl. proced. de update (re-draw) •  Impl. proced. de inicialização (registro, setup do Controller) class View : public Observer ( public: View (Model *m) : myModel (m) , mycontroller (0) { myModel ->attach(this) ; } virtual ~View ( ) ( myModel ->detach (this) ; } virtual void update ( ) { this->draw 0 ; } 19 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 20. Implementação // abstract interface to be redefined: virtual void initialize( ) ; // see below virtual void draw ( ) ; // (re-)display view Model *getModel( ) { return myModel; } Controller *getcontroller( ) { return mycontroller; } protected: Model *myModel ; Controller *myController; // set by initialize }; class Barchartview : public View { public: BarChartView (Model *m) : View(m) { } virtual void draw( ) ; }; 20 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 21. Implementação void BarChartView::draw ( ) { Iterator<String> ip = myModel->makePartyIterator(); Iterator<long> iv = myModel->makevoteIterator(); List<long> dl; //for scaling values to fill screen long max = 1; // maximum for adjustment // calculate maximum vote count while (iv.next( )) { if (iv.curr( ) > max ) max = iv.curr( ); } iv.reset ( ) ; // now calculate screen coordinates for bars while (iv.next( )) { dl.append((MAXBARS1ZE * iv.curr( ))/max); } // reuse iterator object for new collection: iv = dl; // assignment rebinds iterator to new list iv.reset ( ) ; while (ip.next( ) && iv.next( )) { // draw text: cout << ip.curr 0 << " : " ; // draw bar: ... drawbox(BARWIDTH, iv.curr0) ;... } 21 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 22. Implementação 4.  Projete e implemente os Controllers 22 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 23. Implementação 5.  Projete e implemente o relacionamento View-Controller –  Tipicamente, cada View tem o seu Controller –  Para criar uma hierarquia de classes, usa-se o Padrão Factory. •  Define-se um makecontroller() nas classes View, para que as subclasses View possam redefinir seus Controllers redefinindo o método Factory 23 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 24. Implementação 24 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 25. Implementação 6.  Implementar o set-up do MVC 25 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 26. Implementação 7.  Criação (gerência) dinâmica de Views 8.  Controllers plugáveis •  Diferentes controllers para um View (expert versus iniciante ou diferentes dispositivos de entrada) 9.  Infra-estrutura para View e Controllers hierárquicos 26 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 27. Variante •  Document-View – Relaxamento da separação entre View e Controller – Ex.: X-Windows System 27 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 28. Benefícios •  Múltiplos Views do mesmo Model •  Views sincronizados •  Views e Controllers plugáveis •  “Permutabilidade” do “look-and-feel” 28 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann
  • 29. Desvantagens •  Complexidade maior •  Potencial para um número excessivo de updates •  Conexão íntima entre View e Controller •  Acoplamento de View e Controllers ao Model •  Ineficiência no acesso de dados no View •  Mudança inevitável do View e Controller quando se porta a aplicação 29 Livro Texto: Pattern Oriented Software Eduardo N. F. Zagari Architecture - Buschmann