MODEL-VIEW-CONTROLLER PROBLEMA



Documenti analoghi
Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A

J2EE (o JEE): Framework Java per lo sviluppo di applicazioni WEB Enterprise, che vivono in rete e che siano accessibili attraverso browser.

CORSO DI PROGRAMMAZIONE JAVA

Implementazione di MVC. Gabriele Pellegrinetti

Applicazione: GAS - Gestione AcceSsi

DESIGN PATTERN CREAZIONALI INGEGNERIA DEL SOFTWARE INTRODUZIONE SINGLETON. Scopo dei design pattern creazionali

DESIGN PATTERN ESERCITAZIONE PREPARAZIONE ALL ESAME, PARTE II INGEGNERIA DEL SOFTWARE. La soluzione corretta è la c)

Sviluppo e manutenzione di un applicazione CAD tramite le WPF e l MV-VM

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

Architettura MVC-2 A L B E R T O B E L U S S I A N N O A C C A D E M I C O /

L architettura MVC (Model- View-Controller) Introduzione

SWIM v2 Design Document

PROGETTAZIONE E SVILUPPO DI UN. Relatore: Studente: Paolo Merialdo Valerio Barbagallo

Programmazione server-side: Java Servlet

Introduzione ai Web Services Alberto Polzonetti

Introduzione al Model-View-Controller (MVC)

Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica. Ingegneria del Software. La fase di Analisi

SOMMARIO DIAGRAMMI DEI PACKAGE

Da Settembre 2010 Oggi. Go Project srl via Alessandria 88, Roma. Inail Istituto Nazionale Infortuni sul Lavoro

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Architetture Software

Generazione Automatica di Asserzioni da Modelli di Specifica

Architettura MVC-2: i JavaBeans

Port Community System del Porto di Ravenna CONFIGURAZIONE

Il Pattern PROXY. Ex presentazione realizzata dallo studente Paolo Melchiori (matricola 65734) nell a.a

Framework di Middleware. per Architetture Enterprise

Strutture di accesso ai dati

Componenti di una applicazione. Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali:

La Roadmap dello sviluppo per System i5: dalle Applicazioni Legacy alla SOA

Sviluppo di applicazioni web con il pattern Model-View-Controller. Gabriele Pellegrinetti

Analisi e sviluppo di un portale di e-commerce

INFORMAZIONI PERSONALI

Laboratorio di Basi di Dati

Programmare in ambiente Java Enterprise: l offerta formativa di Infodue

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Progettazione e Sviluppo dell Applicazione Web Share Mobile per Dispositivi Mobili Multipiattaforma. Elaborato di Laurea di: Marco Stanzani

Realizzazione di un prototipo di un software web based per la gestione di un inventario comunale

Specifiche Tecnico-Funzionali

Candidato: Luca Russo Docente: Prof. Raffaele Montella. 27 Marzo 2013

1 Applicazione J2EE sul SAP WAS con SAP NWDS

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Mobile & Technology. Area di formazione. Corso ios base. Corso ios avanzato. Il mondo delle App: idee, creatività, business.

Componenti Web: client-side e server-side

ALLEGATO 8.1 DESCRIZIONE PROFILI PROFESSIONALI

Realizzazione di uno strumento web-based per la simulazione remota di reti di sensori senza filo

The new VirtueMart 2. la rivoluzione del più diffuso e-commerce per Joomla

Corso Android Corso Online Sviluppo su Cellulari con Android

Esercitazione sui Design Pattern

Reingegnerizzazione di un Content Management System verso l accessibilità secondo la normativa italiana

Applicazioni web. Sommario. Parte 6 Servlet Java. Applicazioni web - Servlet. Alberto Ferrari 1. Servlet Introduzione alle API ed esempi

Il Pattern MVC nei Framework di sviluppo per applicazioni Web. Analisi e comparazione di SPRING MVC Framework e ASP.NET MVC Framework.

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

INTEGRATA OTTIMIZZAZIONE DEI PROCESSI AZIENDALI

I MODULI Q.A.T. PANORAMICA. La soluzione modulare di gestione del Sistema Qualità Aziendale

BiblioTech - Personal Digital Library

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Alcuni Design Pattern in Java

Ingegneria del Software. Introduzione al pattern

1 JSPDynPage, componenti portale e Java Server Pages

Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione. Facoltà di Ingegneria. Laurea Magistrale in Ingegneria Informatica

La Metodologia adottata nel Corso

Sequenza alternativa degli eventi: Variazione di prezzo superiore al 20% per almeno un articolo.

E.S.B. Enterprise Service Bus ALLEGATO C11

Applicazione: SIPER Servizi In linea per il PERsonale

RRF Reply Reporting Framework

Amministrazione Patrimonio Fondi

Architettura SW Definizione e Notazioni

Progettazione e Implementazione di API WebSocket per il Gateway Dog

MetaMAG METAMAG 1 IL PRODOTTO

Allegato 1 CIG FF PROCEDURA DI AFFIDAMENTO PER LA FORNITURA DI UNA PIATTAFORMA PER SERVICE MASHUP AND DELIVERY CAPITOLATO TECNICO

Breve introduzione allo sviluppo WEB. a cura di Ciro Attanasio - ciro.attanasio@ .cz

Applicazione: SAI - Sistema di Audit Interno

Object Oriented Software Design

Introduzione ad Architetture Orientate ai Servizi e Web Service

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali

Lezione 1 Introduzione

Tecnologie dei Linguaggi di Programmazione

Area di formazione. Mobile & Technology. Ingolosito dalle nuove tecnologie? Appassionato di sviluppo App e Mobile? Corso ios avanzato Swift

Ingegneria del Software. Introduzione ai pattern

L o. Walter Ambu japs: una soluzione agile (

7. Architetture Software

Esercizi di JavaScript

Progettazione: Tecnologie e ambienti di sviluppo

PROXYMA Contrà San Silvestro, Vicenza Tel Fax

Overview SAP Workflow. ECORA Srl - Massimo Rastaldi m.rastaldi@eco-ra.it Cell

Presentazione di Cedac Software

INTEGRATA OTTIMIZZAZIONE DEI PROCESSI AZIENDALI

Transcript:

MODEL VIEW CONTROLLER DESIGN PATTERN MODEL-VIEW-CONTROLLER INGEGNERIA DEL SOFTWARE Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2013 2014 rcardin@math.unipd.it Architetturali Model view controller 2 INTRODUZIONE E CONTESTO PROBLEMA Pattern architetturale Inizialmente utilizzato per GUI Smalltalk-80 ora pattern base dell architettura J2EE,.NET, RoR...... e dei maggiori framework JS: AngularJS, BackboneJS,... Supporto a diverse tipologie di utenti con diverse interfacce Rischio di duplicazione del codice ( cut and paste ) Contesto d utilizzo Applicazioni che devono presentare attraverso una GUI un insieme di informazioni Le informazioni devono essere costantemente aggiornate Separation of concerns Le persone responsabili dello sviluppo hanno compentenze differenti 3 4

NECESSITÀ Accesso ai dati attraverso viste differenti Ad esempio: HTML/Js, JSP, XML, JSON I dati devono poter essere modificati attraverso interazioni differenti con i client Ad esempio: messaggi SOAP, richieste HTTP, SOLUZIONE E STRUTTURA Disaccoppiamento (separation of concerns) Model: dati di business e regole di accesso View: rappresentazione grafica Controller: reazione della UI agli input utente (application logic) Il supporto a diverse viste non deve influire sulle componenti che forniscono le funzionalità base. 5 6 SOLUZIONE E STRUTTURA SOLUZIONE E STRUTTURA Model Definisce il modello dati Regole di business Dati e le operazioni su questi Progettato mediante tecniche object oriented Design pattern Notifica alla view aggiornamenti del modello dati Observer pattern deve visualizzare sempre dati aggiornati! 7 Gestisce la logica di presentazione verso i vari utenti Metodi di interazione con l applicazione Cattura gli input utente e delega al controller l elaborazione Aggiornamento push model La view deve essere costantemente aggiornata Utilizzo design pattern Observer MVC in un solo ambiente di esecuzione (i.e. Javascript) Aggiornamento pull model La view richiede aggiornamenti solo quando è opportuno MVC su diversi ambienti di esecuzione Strategia JEE classico (JSP, Servlet) 8

SOLUZIONE E STRUTTURA STRATEGIE Controller Trasforma le interazioni dell utente (view) in azioni sui dati (model) Realizza l application logic Esiste un Controller per ogni View Design patten Strategy Modifica degli algoritmi che permettono l interazione utente con il model. Input 1 Input 2 Controller T(Input 1) T(Input 2) Model 9 Nativo Web based (server) View: JSP Controller: Servlet Controller centralizzato Una sola servlet come controller (Front Controller pattern) Configurazione tramite XML o annotazioni Model: EJB / Hibernate / MyBatis Web based (client, single page application) View: Javascript e template Controller: Javascript (routing) Model: Javascript Sincronizzazione con backend tramite API REST/SOAP 10 COLLABORAZIONI COLLABORAZIONI Design pattern Observer ( push model ) Design pattern Observer ( push model ) Controller osserva View View osserva Model 11 12

ESEMPIO PRATICO - PULL MODEL Ricordate il nostro esempio? Esempio Il cliente sfoglia il catalogo ed aggiunge i prodotti desiderati al carrello della spesa. Quando il cliente termina l acquisto e deve pagare, lo stesso fornisce le informazioni sulla consegna dei prodotti e sulla carta di credito. Il sistema verifica l autorizzazione al pagamento con carta di credito e conferma l acquisto immediatamente e mediante una successiva mail. ESEMPIO PRATICO - PULL MODEL Il pattern MVC in Java Controller Model Proviamo a dare un esempio di GUI progettata utilizzando MVC (pull model) 13 View 14 ESEMPIO PRATICO - PULL MODEL ESEMPIO PRATICO - PULL MODEL Selezione di un prodotto e aggiunta al carrello View: pagina JSP di selezione del prodotto <%@ taglib uri="tlds/taglib.tld" prefix="tg" %> <html> <head>aggiungi carrello</head> <body> <form action="selezione_prodotto.do" method="post"> <tg:for name="prodotto" value="${catalogo.prodotto"> <tg:checkbox name="${prodotto.nome" value="${prodotto.id" display="${prodotto.descrizione" /> </tg:for> </form> </body> </html> Lista di prodotto 15 Selezione di un prodotto e aggiunta al carrello Controller: HttpServlet, trasformazione e redirezione public class ServletControllo extends HttpServlet { public void doget(request, response){ String prod = request.getparameter("checkboxprod"); HttpSession session = request.getsession(true); Recupero input Prodotto prodselez = (session.getattribute("listaprodotti")).get(prod); Carrello carrello = (Carrello) session.getattribute("carrello"); carello.addprodotto(prodselez); response.sendredirect("sezioneprodotti"); 16 Selezione destinazione del processo

ESEMPIO PRATICO - PULL MODEL Selezione di un prodotto e aggiunta al carrello Model: business, aggiunta del prodotto al carrello public class ServletControllo extends HttpServlet { public void doget(request, response){ String prod = request.getparameter("checkboxprod"); HttpSession session = request.getsession(true); Prodotto prodselez = (session.getattribute("listaprodotti")).get(prod); Carrello carrello = (Carrello) session.getattribute("carrello"); carello.addprodotto(prodselez); response.sendredirect("sezioneprodotti"); Operazioni di business 17 ESEMPIO PRATICO PUSH MODEL Esempio Vogliamo costruire un applicazione che permetta la gestione di foto e album fotografici da parte di un utente. Model var Photo = Backbone.Model.extend({ // Default attributes for the photo defaults: { src: "placeholder.jpg", caption: "A default image", viewed: false, // Ensure that each photo created has an `src`. initialize: function() { this.set( { "src": this.defaults.src ); ); Modello dati semplice 18 ESEMPIO PRATICO PUSH MODEL CONSEGUENZE var buildphotoview = function ( photomodel, photocontroller ) { //... var render = function () { photoel.innerhtml = _.template( "#phototemplate", { src: photomodel.getsrc() Templating ); ; photomodel.addsubscriber( render ); photoel.addeventlistener( "click", function () { photocontroller.handleevent( "click", photomodel ); ); //... return { showview: show, hideview: hide ; ; Operazioni esposte dalla vista Osservazione modello e comunicazione attiva con controller 19 Riuso dei componenti dei model Riutilizzo dello stesso model da parte di differenti view Miglior manutenzione e processo di test Supporto più semplice per nuovi tipi di client Creazione nuova view e controller Maggiore complessità di progettazione Introduzione molte classi per garantire la separazione 20

MODEL VIEW PRESENTER Presenter (passive view) Man in the middle Osserva il modello Aggiorna e osserva la vista (dumb) Interfaccia di comunicazione Metodi setter e getter per il recupero dei dati Si riduce ad un template di visualizzazione e ad un interfaccia di comunicazione Può essere sostituita da un mock in fase di test In Js si espone un protocollo 21 MODEL VIEW VIEWMODEL Separazione sviluppo UI dalla business logic Model Modella i dati, senza le operazioni su essi (dumb) Model Proiezione del modello per una vista Binding con la vista e il modello Dati e operazioni che possono essere eseguiti su una UI Dichiarativa (utilizzando linguaggi di markup) Two-way data-binding con proprietà del ViewModel Non possiede più lo stato dell applicazione. 22 MODEL VIEW VIEWMODEL GLOSSARIO Comunicazione tramite data-binding e eventi JEE Java Enterprise Edition Insieme di specifiche per l implementazione di applicazioni enterprise Partecipazione attiva del ViewModel sui dati del Model Enterprise Java Bean (EJB), Servlet, Java Server Pages (JSP), Web services, Portlet, JMS,....NET Framework corrispondente in casa Microsoft RoR, Ruby on Rails Framework di agile programming basato su Ruby Grails 23 Framework di agile programming basato su Groovy 24

RIFERIMENTI Design Patterns, Elements of Reusable Object Oriented Software, GoF, 1995, Addison-Wesley GUI Arichitectures http://martinfowler.com/eaadev/uiarchs.html MVC http://www.claudiodesio.com/ooa&d/mvc.htm Core J2EE MVC design pattern http://java.sun.com/blueprints/patterns/mvc-detailed.html Core J2EE Front controller pattern http://java.sun.com/blueprints/corej2eepatterns/patterns/fr ontcontroller.html Learning Javascript Design Patterns http://addyosmani.com/resources/essentialjsdesignpatterns/ book/ 25