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