====== Architettura generale: cakePHP ====== OpenDCN è basato su CakePHP, un framework open-source per lo sviluppo di applicazioni Web in PHP.\\ CakePHP è stato scelto in quanto in possesso di numerose caratteristiche in grado di favorire lo sviluppo di applicazioni web di buona qualità.\\ In particolare:\\ * Architettura Modello Vista Controllo (MVC)\\ * Componenti di Sicurezza, Sessioni e Gestione delle richieste\\ * Validazione incorporata\\ * Template veloci e flessibili (con possibilità di richiamare funzioni PHP)\\ * Strumenti per l’utilizzo di funzionalità AJAX, Javascript, Form HTML e altro\\ * Lista di controllo degli accessi flessibile\\ * Gestione flessibile della cache delle viste\\ * Facilità di integrazione con Apache\\ * Compatibilità con PHP4 and PHP5\\ * Integrazione CRUD per l’interazione con il database e la semplificazione delle query\\ * Community di sviluppo con un buon grado di affidabilità\\ * Licenza open source flessibile\\ CakePHP consente di sviluppare applicazioni web basate sul paradigma MVC (Model – View - Controller). Si tratta di uno schema generale di progettazione del software che aiuta a separare logicamente il codice, facendolo più riusabile, mantenibile e solitamente migliore.\\ Seguendo il paradigma MVC un’applicazione si struttura in tre parti: il modello, la vista e il controllo. MVC è stato originariamente sviluppato per schematizzare il tradizionale ruolo input, processo e output all’interno del mondo delle interfacce utente.\\ \\ Input -> Processo -> Output\\ Controllo -> Modello -> Vista\\ \\ {{:basic_mvc.png|}}\\ 1. Model che rappresenta i dati dell'applicazione; 2. View che fornisce la presentazione dei dati del modello; 3. Controller che gestisce ed indirizza le richieste fatte dal client.\\ \\ \\ L’**input** dell’utente, il modello del mondo esterno (processo) e il feedback visuale sono separati e gestiti da oggetti rispettivamente di controllo, modello e vista.\\ Il **controllo** interpreta gli input del mouse e della tastiera dell’utente e mappa queste azioni in comandi che vengono inviati al modello e/o alla vista per effettuare le azioni appropriati.\\ Il **modello** gestisce uno o più elementi di dati, risponde alla query con il proprio stato, e risponde alle istruzioni per cambiare lo stato.\\ La **vista** gestisce la visualizzazione sulla pagina web ed è responsabile per la presentazione dei dati all’utente attraverso la combinazione di grafica e testo.\\ Il **controller** di CakePHP gestisce le richieste dal server. Prende l’input dell’utente (URL e dati POST), esegue la logica applicativa, usa i Modelli per leggere e scrivere i dati dai database e da altre sorgenti, e infine, invia i dati in output al file di visualizzazione appropriato.\\ \\ I **modelli** di OpenDCN definiscono quali sono gli oggetti che caratterizzano il sistema.\\ Tutte le classi presenti nella cartella “Models” estendono di fatto la classe AppModel ed alcune integrano anche delle funzioni che gestiscono gli oggetti stessi.\\ \\ I **controllers**, come definito da cake, sono gli strumenti che permettono di svolgere determinate azioni sugli oggetti che compongono il sistema.\\ Tutte le classi presenti nella cartella “controllers” estendono di fatto la classe AppController e definiscono le azioni che vengono invocate per interagire con il sistema.\\ \\ La visualizzazione finale delle pagine è definite tramite le **view**.\\ I files delle viste, contenuti nella cartella “Views” e organizzati in cartelle a seconda del modello che implementano, sono in formato tpl con all’interno la disposizione di form e div che costituiscono la pagina.\\ \\ \\ \\ \\ [[convenzioni in cakephp | avanti]] \\ \\ \\ \\