Source: https://perso.esiee.fr/~bureaud/Unites/In4r21/0809/Docs/patterns_mvc_cours2.pdf