SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Un approccio modulare
  in un progetto legacy

     Mariano Fiorentino
Chi sono
          Co-fondatore PUG Torino

    Architetto software per Engineering IT
Responsabile tecnico su progetti Fiat/Chrysler
Progetto e.Link

    Nasce nel 2003 per dare uno strumento informatico ai
    concessionari per vendere vetture da catalogo.



    Viene sviluppato con php4/mysql secondo gli
    “standard tecnologici dell'epoca”
Standard php 4 del 2003
import('Marca');
import('Concessionario');
$marcaObj = new Marca();
$concessionario = new Concessionario();
?>
  <html>
  <link rel="Stylesheet" href="fiat_link.css">
  <body>
  <?
  if ( $id_marca == "" ) {
       $id_marca = $SS_CODBRAND;// una global...
       $tablaResultados = array();
       if ( $mode == "concesionario" ) {
Com'era e.Link
e.Link in Europa
e.Link oggi
Negli anni il software ha subito un'evoluzione
vertiginosa, viene arricchito di moduli di ogni genere.



    6 milioni di righe di codice

    Attualmente un gruppo di 50+ persone

    Oltre 150 programmatori nel tempo

    3000+ classi

    100+ integrazioni con sistemi esterni

    100'000 utenti
e.Link nel mondo
Un portale per i dealers
Strategie di evoluzione
In un software di queste dimensioni è necessario:



    ridurre al minimo il codice prodotto con le nuove
    evolutive

    usare componenti standard, cercare di non
    reinventare la ruota
Zend Framework in e.Link


    Zend_Http       
                        Zend_Amf

    Zend_Mail       
                        Zend_GData

    Zend_Locale     
                        Zend_Config

    Zend_Log        
                        Zend_Translate

    Zend_Currency   
                        Zend_Cache

    Zend_Pdf        
                        Zend_Json
Before Frameworks...
/**
* @version $Id: class_php_date.php,v 1.53 2012/07/03
class PhpDate {

      function toChar($format = "") {
      if (!$format) $format = "YYYY-MM-DD HH:MI:SS";
          $format = str_replace("YYYY", "Y", $format);
          $format = str_replace("MM", "m", $format);
      if ($this->plain) {
         if ($format == "Y-m-d")
           return $this->anno."-".$this->mese...
         if ($format == "d-m-Y")...
Before Frameworks...


    53 commit in 9 anni prima di arrivare ad una
    versione definitiva.



    Necessità di studiarsi in casa ed implementare tutti
    gli standard dei paesi su cui si rilascia il software.



    Soluzione inevitabilmente progettata per il problema
    in oggetto, molto probabilmente non esportabile.



    ~2000 problemi relativi alle date in 10 anni.
Gestione delle date
                               attuale


$date = new Zend_Date(
     time(),
     Zend_Date::TIMESTAMP,
     new Zend_Locale($locale_id)
  );
echo $date->get(Zend_Date::DATE_MEDIUM);
La localizzazione...


    Problema ancora più critico delle date perchè di più
    ampia portata, non si tratta solo eventualmente di
    formattare numeri, ma bisogna gestire:
       –   contenuti locali e valori culturali
       –   simboli
       –   contesto sociale



    Le nostre aziende fanno software e non
    antropologia.
Potersi dedicare al
                               software...
$locale = new Zend_Locale('ar_MA');
$localNames = $locale->getTranslationList();


// Locale per il Marocco
<localeDisplayNames>
  <localeDisplayPattern>
     <localePattern>{0} ({1})</localePattern>
     <localeSeparator>،</localeSeparator>
  </localeDisplayPattern>
  <languages>
     <language type="aa">‫/<ﺍﻸﻓﺍﺮﻳﺓ‬language>
     <language type="ab">‫/<ﺍﻸﺒﺧﺍﺰﻳﺓ‬language>
Integrazioni con Google
$client = new Zend_Http_Client();
$client->setUri('http://maps.google.com/maps/geo');
$client->setConfig($pars);
$client->setParameterGet(array(
            'output' => '', //default json
            'key'    => $this->googleAPIKey,
            'q'     => $this->address.));
$response = $client->request();
Tutte le volte che ha
                                    senso
// load required classes
require_once 'Zend/Loader.php';
Zend_Loader::loadClass ('Zend_Translate');
Zend_Loader::loadClass ('Zend_Locale');
Zend_Loader::loadClass ('Zend_Registry');
Zend_Loader::loadClass ('Zend_Log_Writer_Stream');
Zend_Loader::loadClass ('Zend_Log');
Zend_Loader::loadClass ('Zend_Config_Ini');
// Link MVC
class ActionController {
Un po' di statistiche
                              #CR   #Bugs   Bugs/CR

                       2005   176    2630        15

                       2006   308    4009        13

                       2007   285    3222        11
Introduzione dei
                       2008   537    2648         5
Framework Zend/Extjs
                       2009   341    2022         6

                       2010   330    1990         6

                       2011   372    2188         6

                       2012   515    1813         4
Ma perchè proprio
                   Zend Framework?

    Uno dei due framework php più usati al mondo



    Un ampia comunità di sviluppatori



    Supporto da parte di un azienda
Domande?



mariano.fiorentino@gmail.com

Mais conteúdo relacionado

Destaque (20)

One day for_you
One day for_youOne day for_you
One day for_you
 
B bmed sc_presentation_(shorter)
B bmed sc_presentation_(shorter)B bmed sc_presentation_(shorter)
B bmed sc_presentation_(shorter)
 
Alleluia
AlleluiaAlleluia
Alleluia
 
Uc lan prospectus march 2013
Uc lan prospectus march 2013Uc lan prospectus march 2013
Uc lan prospectus march 2013
 
+ Taormina sicilia
+ Taormina sicilia+ Taormina sicilia
+ Taormina sicilia
 
Kenya adriana-
Kenya  adriana-Kenya  adriana-
Kenya adriana-
 
Insolitesvol (1)
Insolitesvol (1)Insolitesvol (1)
Insolitesvol (1)
 
Case study-edith-cowan-university
Case study-edith-cowan-universityCase study-edith-cowan-university
Case study-edith-cowan-university
 
+ Taormina sicilia
+ Taormina sicilia+ Taormina sicilia
+ Taormina sicilia
 
Cuenca y provincia (1)
Cuenca y provincia (1)Cuenca y provincia (1)
Cuenca y provincia (1)
 
Sanpetersburgo
SanpetersburgoSanpetersburgo
Sanpetersburgo
 
Mundo perdido
Mundo perdidoMundo perdido
Mundo perdido
 
Alcazar of seville lia - vu
Alcazar of seville   lia - vuAlcazar of seville   lia - vu
Alcazar of seville lia - vu
 
Sirtakiss r
Sirtakiss rSirtakiss r
Sirtakiss r
 
Diario de potter
Diario de potterDiario de potter
Diario de potter
 
Alaska milespowerpoints.com
Alaska milespowerpoints.comAlaska milespowerpoints.com
Alaska milespowerpoints.com
 
7. student support presentation
7. student support presentation7. student support presentation
7. student support presentation
 
84998 spanishisdifferent
84998 spanishisdifferent84998 spanishisdifferent
84998 spanishisdifferent
 
Vaya fotos
Vaya fotosVaya fotos
Vaya fotos
 
1. rector's welcome
1. rector's welcome1. rector's welcome
1. rector's welcome
 

Semelhante a Case study: un approccio modulare in un progetto legacy

Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANODrupalDay
 
Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8massimiliano.wosz
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressEnrico Zimuel
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingFrancesca1980
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLSinergia Totale
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1massimiliano.wosz
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue jsGianfranco Castro
 
Best Training instiute in Bangalore
Best Training instiute in BangaloreBest Training instiute in Bangalore
Best Training instiute in Bangaloreblueoceantraining
 
Simone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web ServiceSimone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web ServiceFrancesco Fullone
 
Federico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriGrUSP
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriAlessandro Nadalin
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ CodeDaniele Mondello
 
Massimiliano Wosz - Zend Framework 1.5
Massimiliano Wosz - Zend Framework 1.5Massimiliano Wosz - Zend Framework 1.5
Massimiliano Wosz - Zend Framework 1.5Francesco Fullone
 

Semelhante a Case study: un approccio modulare in un progetto legacy (20)

Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
 
Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in Wordpress
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 
Modernizziamo IBM i con PHP
Modernizziamo IBM i con PHPModernizziamo IBM i con PHP
Modernizziamo IBM i con PHP
 
PHP goes mobile
PHP goes mobilePHP goes mobile
PHP goes mobile
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
 
Best Training instiute in Bangalore
Best Training instiute in BangaloreBest Training instiute in Bangalore
Best Training instiute in Bangalore
 
Laravel Framework PHP
Laravel Framework PHPLaravel Framework PHP
Laravel Framework PHP
 
Simone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web ServiceSimone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web Service
 
Federico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile Cordova
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
Massimiliano Wosz - Zend Framework 1.5
Massimiliano Wosz - Zend Framework 1.5Massimiliano Wosz - Zend Framework 1.5
Massimiliano Wosz - Zend Framework 1.5
 
Hexagonal architecture ita
Hexagonal architecture itaHexagonal architecture ita
Hexagonal architecture ita
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2
 

Case study: un approccio modulare in un progetto legacy

  • 1. Un approccio modulare in un progetto legacy Mariano Fiorentino
  • 2. Chi sono Co-fondatore PUG Torino Architetto software per Engineering IT Responsabile tecnico su progetti Fiat/Chrysler
  • 3. Progetto e.Link  Nasce nel 2003 per dare uno strumento informatico ai concessionari per vendere vetture da catalogo.  Viene sviluppato con php4/mysql secondo gli “standard tecnologici dell'epoca”
  • 4. Standard php 4 del 2003 import('Marca'); import('Concessionario'); $marcaObj = new Marca(); $concessionario = new Concessionario(); ?> <html> <link rel="Stylesheet" href="fiat_link.css"> <body> <? if ( $id_marca == "" ) { $id_marca = $SS_CODBRAND;// una global... $tablaResultados = array(); if ( $mode == "concesionario" ) {
  • 7. e.Link oggi Negli anni il software ha subito un'evoluzione vertiginosa, viene arricchito di moduli di ogni genere.  6 milioni di righe di codice  Attualmente un gruppo di 50+ persone  Oltre 150 programmatori nel tempo  3000+ classi  100+ integrazioni con sistemi esterni  100'000 utenti
  • 9. Un portale per i dealers
  • 10. Strategie di evoluzione In un software di queste dimensioni è necessario:  ridurre al minimo il codice prodotto con le nuove evolutive  usare componenti standard, cercare di non reinventare la ruota
  • 11. Zend Framework in e.Link  Zend_Http  Zend_Amf  Zend_Mail  Zend_GData  Zend_Locale  Zend_Config  Zend_Log  Zend_Translate  Zend_Currency  Zend_Cache  Zend_Pdf  Zend_Json
  • 12. Before Frameworks... /** * @version $Id: class_php_date.php,v 1.53 2012/07/03 class PhpDate { function toChar($format = "") { if (!$format) $format = "YYYY-MM-DD HH:MI:SS"; $format = str_replace("YYYY", "Y", $format); $format = str_replace("MM", "m", $format); if ($this->plain) { if ($format == "Y-m-d") return $this->anno."-".$this->mese... if ($format == "d-m-Y")...
  • 13. Before Frameworks...  53 commit in 9 anni prima di arrivare ad una versione definitiva.  Necessità di studiarsi in casa ed implementare tutti gli standard dei paesi su cui si rilascia il software.  Soluzione inevitabilmente progettata per il problema in oggetto, molto probabilmente non esportabile.  ~2000 problemi relativi alle date in 10 anni.
  • 14. Gestione delle date attuale $date = new Zend_Date( time(), Zend_Date::TIMESTAMP, new Zend_Locale($locale_id) ); echo $date->get(Zend_Date::DATE_MEDIUM);
  • 15. La localizzazione...  Problema ancora più critico delle date perchè di più ampia portata, non si tratta solo eventualmente di formattare numeri, ma bisogna gestire: – contenuti locali e valori culturali – simboli – contesto sociale  Le nostre aziende fanno software e non antropologia.
  • 16. Potersi dedicare al software... $locale = new Zend_Locale('ar_MA'); $localNames = $locale->getTranslationList(); // Locale per il Marocco <localeDisplayNames> <localeDisplayPattern> <localePattern>{0} ({1})</localePattern> <localeSeparator>،</localeSeparator> </localeDisplayPattern> <languages> <language type="aa">‫/<ﺍﻸﻓﺍﺮﻳﺓ‬language> <language type="ab">‫/<ﺍﻸﺒﺧﺍﺰﻳﺓ‬language>
  • 17. Integrazioni con Google $client = new Zend_Http_Client(); $client->setUri('http://maps.google.com/maps/geo'); $client->setConfig($pars); $client->setParameterGet(array( 'output' => '', //default json 'key' => $this->googleAPIKey, 'q' => $this->address.)); $response = $client->request();
  • 18. Tutte le volte che ha senso // load required classes require_once 'Zend/Loader.php'; Zend_Loader::loadClass ('Zend_Translate'); Zend_Loader::loadClass ('Zend_Locale'); Zend_Loader::loadClass ('Zend_Registry'); Zend_Loader::loadClass ('Zend_Log_Writer_Stream'); Zend_Loader::loadClass ('Zend_Log'); Zend_Loader::loadClass ('Zend_Config_Ini'); // Link MVC class ActionController {
  • 19. Un po' di statistiche #CR #Bugs Bugs/CR 2005 176 2630 15 2006 308 4009 13 2007 285 3222 11 Introduzione dei 2008 537 2648 5 Framework Zend/Extjs 2009 341 2022 6 2010 330 1990 6 2011 372 2188 6 2012 515 1813 4
  • 20. Ma perchè proprio Zend Framework?  Uno dei due framework php più usati al mondo  Un ampia comunità di sviluppatori  Supporto da parte di un azienda