Skip to content
This repository was archived by the owner on Mar 2, 2026. It is now read-only.

Informazioni sul corso

Riccardo Bastianini edited this page May 27, 2025 · 7 revisions

Introduzione

Questo repository viene utilizzato per l'esame di Laboratorio di Ingegneria del Software del corso di laurea in Programmazione e Gestione dei Sistemi Informatici (anno 2023/2024).

Durante il corso, partendo dal primo commit di questo repository, installeremo il framework PHP Symfony, e costuiremo una piccola applicazione per consultare e inserire previsioni del tempo. Nel farlo vedremo quali sono i componenti di Symfony che si occupano delle varie funzionalità che utilizzeremo, li installeremo, li configureremo e li utilizzeremo per realizzare il sito. Mentre costruiremo l'applicazione, presteremo attenzione ai design pattern impiegati da Symfony e ne utilizzeremo alcuni anche noi, discutendo di volta in volta del loro scopo e funzionamento.

Programma

Il programma tentativo del corso è il seguente. Potrebbe subire variazioni a seconda del tempo speso a lezione sui vari argomenti.

  • Elementi di Docker (Dockerfile e docker-compose.yml) e di configurazione di PHP (php.ini)
  • Composer come strumento per la gestione di dipendenze e come autoloader.
  • Struttura delle directory di un progetto basato su Symfony, file di configurazione e ambienti di esecuzione.
  • Installazione e configurazione di PHPStan e PHP-cs-fixer per l'analisi statica il linting dei sorgenti.
  • Pattern Model-View-Controller: I controller, le rotte, i parametri, il matching delle rotte.
  • Pattern Model-View-Controller: La vista. Twig, ereditarietà e inclusione di template. Sintassi {{ }}, {% %}, {# #}, if, for. Traduzione e il filtro trans. Struttura tradizione a tre livelli per i template.
  • Pattern Model-View-Controller: I modelli. Creazione di modelli come semplici oggetti PHP (POPO), proprietà obbligatorie e facoltative, metodo costruttore e istanziazione di entità "valide". Installazione e configurazione di Doctrine, aggiunta degli attributi Doctrine (Entity, Table, Id, GeneratedValue, Column) ai modelli. Relazioni dirette e inverse (attributi OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn). Gestione delle migrazioni. Generazione di dati di prova con le fixture. Utilizzo dei Value Object per imporre la consistenza dei dati. Utilizzo del Repository pattern per l'astrazione dell'accesso al Database. Repository predefiniti e metodi magici. Repository personalizzati e QueryBuilder per la costruzione parametrica delle query. Paginazione. Utilizzo dell'EntityManagerInterface per la gestione delle entità, problema delle N+1 query.
  • La console di Symfony: definizione di comandi, argomenti e opzioni, gestione di input e output.
  • Ricezione di input dall'esterno: definizione di form e il Composite pattern. Vincoli e validatori, applicazioni delle regole di validazione. Il pattern Data Transfer Object.
  • Principi SOLID, il container di iniezione delle dipendenze, definizione di servizi.
  • Il testing del software: la piramide dei test. PHPUnit e i test unitari. Oggetti test doubles e mocking. Test di integrazione e funzionali. Gestione del database e delle dipendenze esterne.
  • Autenticazione e autorizzazione: il firewall, i permessi e la gestione degli utenti.

Struttura delle lezioni

Le lezioni sono di tipo laboratorio. Gli studenti sono incoraggiati ad utilizzare il loro computer per programmare insieme all'insegnante, installando pacchetti e scrivendo codice. Lavoreremo su questo repository, partendo da un primo commit fornito dall'insegnante contenente solo un ambiente di sviluppo composto da un container con PHP 8.3 + Apache e un database PostgreSQL.

I primi minuti di ogni lezione (tranne la prima, per ovvie ragioni), faremo un breve ripasso dei punti toccati la volta precedente: la partecipazione attiva degli studenti è incoraggiata da qualche domanda sugli argomenti della lezione precedente. In seguito, uno studente volontario (o involontario) presenterà il suo svolgimento degli eventuali esercizi lasciati durante la lezione precedente, o li svolgerà con l'aiuto dei suoi colleghi e dell'insegnante.

Al termine di ogni lezione, la branch master verrà aggiornata per permettere ad eventuali assenti di recuperare quanto fatto in aula.

Comunicazioni con gli studenti

In aggiunta all'indirizzo email dove è possibile contattare insegnante, è presente un gruppo telegram dove vengono condivisi eventuali aggiornamenti sul calendario delle lezioni e degli esami, porzioni di codice e link a risorse utilizzate durante le lezioni.

Clone this wiki locally