Design Pattern in Django

Qui un elenco dei pattern che ho trovato nel codice di Django.
Ho incluso solo quelli piú corposi (I factory method e i template mathod ad esempio, vengono usati un po' ovunque, quindi non credo abbia senso includerli)
Non escludo di trovarne altri

Abstract Factory - Supporto a tanti database

Django supporta tutti i maggiori database relazionali. In https://github.com/django/django/blob/master/django/db/backends/init.py viene dichiarata la classe BaseDatabaseWrapper, che contiene diversi factory method per creare nuovi elementi (connection, cursor, etc.) per quel database. Ogni database ha poi un'implementazione concreta di queste componenti e della factory.
Questa abstract factory permette di creare gruppi di oggetti astratti appartenenti alla stessa famiglia (un singolo database).

Composite - Configurazione delle URL

Un'utile componente di Django é l'URL dispatcher, che permette il mappaggio fra URL e view.
Ogni app in django puó creare dei mappaggi, che possono poi essere inclusi nella app principale. https://github.com/django/django/blob/master/django/core/urlresolvers.py
Osservando l'implementazione si nota come questo venga implementato con un composite. (RegexURLPattern e RegexURLResolver)

Decorator - Filtraggio metodi HTTP nelle view

Le view in django sono dei metodi che rispondono a richieste HTTP. Ci sono dei decorator (che sfruttano i decorator di python) che permettono il filtraggio delle richieste su particolari metodi (GET, POST etc.)

Facade

Un po' ovunque vengono usati facade per esportare solo i metodi e le classi necessarie all'utilizzatore del framework.

Observer - Signals

Non ho ancora indagato, ma mi stupirei se i signals di django https://docs.djangoproject.com/en/1.6/topics/signals/ non utilizzassero questo pattern.

Command - Migrations

Dalla prossima versione é presente una componente che permette di gestire le migrazioni dello schema dei database.
Ogni tipo di transazione implementa l'interfaccia del command, che permette la reversibilitá delle migrazioni.

Interpreter - Template

Django include un meccanismo di templating per generare dinamicamente pagine html. E' implementato con un interpreter. (Viene anche usato un composite).

written by Matteo Nardi