Case study: un approccio modulare in un progetto legacy

21
Un approccio modulare in un progetto legacy Mariano Fiorentino

description

L'utilizzo di Zend Framework 1 all'interno del progetto Link, software usato da una 'fabbrica automobilistica torinese' per fornire servizi ai concessionari. Link è probabilmente il software in php più grande d'Europa con più di 6 milioni di righe di codice, nato nel 2003 utilizzando la versione 4 del linguaggio, Il talk illustrerà come negli anni si è passati dallo scriversi tutto in casa all'utilizzo dei moduli zend per abbassare i costi di sviluppo, migliorare la scalabilità e limitare le anomalie.">Case study: un approccio modulare in un progetto legacy

Transcript of Case study: un approccio modulare in un progetto legacy

Page 1: Case study: un approccio modulare in un progetto legacy

Un approccio modulare in un progetto legacy

Mariano Fiorentino

Page 2: Case study: un approccio modulare in un progetto legacy

Chi sono

Co-fondatore PUG Torino

Architetto software per Engineering IT

Responsabile tecnico su progetti Fiat/Chrysler

Page 3: Case study: un approccio modulare in un progetto legacy

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”

Page 4: Case study: un approccio modulare in un progetto legacy

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" ) {

Page 5: Case study: un approccio modulare in un progetto legacy

Com'era e.Link

Page 6: Case study: un approccio modulare in un progetto legacy

e.Link in Europa

Page 7: Case study: un approccio modulare in un progetto legacy

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

Page 8: Case study: un approccio modulare in un progetto legacy

e.Link nel mondo

Page 9: Case study: un approccio modulare in un progetto legacy

Un portale per i dealers

Page 10: Case study: un approccio modulare in un progetto legacy

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

Page 11: Case study: un approccio modulare in un progetto legacy

Zend Framework in e.Link

Zend_Http

Zend_Mail

Zend_Locale

Zend_Log

Zend_Currency

Zend_Pdf

Zend_Amf

Zend_GData

Zend_Config

Zend_Translate

Zend_Cache

Zend_Json

Page 12: Case study: un approccio modulare in un progetto legacy

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")...

Page 13: Case study: un approccio modulare in un progetto legacy

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.

Page 14: Case study: un approccio modulare in un progetto legacy

Gestione delle date attuale

$date = new Zend_Date( time(), Zend_Date::TIMESTAMP, new Zend_Locale($locale_id));

echo $date->get(Zend_Date::DATE_MEDIUM);

Page 15: Case study: un approccio modulare in un progetto legacy

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.

Page 16: Case study: un approccio modulare in un progetto legacy

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>

Page 17: Case study: un approccio modulare in un progetto legacy

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();

Page 18: Case study: un approccio modulare in un progetto legacy

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 {

Page 19: Case study: un approccio modulare in un progetto legacy

Un po' di statistiche

#CR #Bugs Bugs/CR

2005 176 2630 15

2006 308 4009 13

2007 285 3222 11

2008 537 2648 5

2009 341 2022 6

2010 330 1990 6

2011 372 2188 6

2012 515 1813 4

Introduzione dei Framework Zend/Extjs

Page 20: Case study: un approccio modulare in un progetto legacy

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

Page 21: Case study: un approccio modulare in un progetto legacy

Domande?

[email protected]