Case study: un approccio modulare in un progetto legacy

Post on 04-Jun-2015

576 views 0 download

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

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_Mail

Zend_Locale

Zend_Log

Zend_Currency

Zend_Pdf

Zend_Amf

Zend_GData

Zend_Config

Zend_Translate

Zend_Cache

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

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

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