# Signum Framework

Signum Framework és un entorn de treball ORM de codi obert, escrit en C# orientat al desenvolupament d'aplicacions sobre la tecnologia .Net de Microsoft, amb una visió centrada en les entitats, de manera que és el model de dades el que determina l'estructura de la base de dades. Com a base de dades només admet MS SQL Server. Signum Framework es distribueix sota la llicència LGPL.

## Elements de Signum Framework

Signum Framework està compost per les ensambladures següents:
* Signum.Entities - Les classes base necessàries per a generar les entitats de dades.
* Signum.Engine - El motor ORM amb un proveïdor LINQ complet.
* Signum.Utilities - Conjunt d'utilitats i eines.
* Signum.Services - Interfícies base del servei WCF.
* Signum.Windows - Controls base per a manipular entitats.

## Entitats primer

La filosofia centrada en les entitats propicia que l'estructura de dades es generi automàticament a partir dels objectes de codi, i s'evita mapar els camps entre la base de dades i les entitats a través d'arxius de configuració. D'aquesta manera es tracta que es detectin les possibles incidències en temps de compilació per a totes les classes (tant de dades com de lògica).
D'altra banda, això és el que impedeix que Signum Framework s'adapti bé a projectes en els quals existeix una base de dades anterior que s'ha de preservar, ja que, a diferència d'altres frameworks, la base de dades es genera a partir del codi i no al revés.
Donada la importància que es concedeix a les entitats com a nucli de les aplicacions, Signum Framework proveeix un petit grup de classes base i primitives que permeten modelar els objectes d'una manera modular i reutilitzable, i eviten la redundància i asseguren la integritat dels objectes, tant en lògica com una vegada persistits en la base de dades. Aquest tret (en haver d'heretar les entitats des d'alguna d'aquestes classes base) fa que Signum Framework no admeti POCO (Plain Old C# Object).

## Generació de l'esquema

La base de dades relacional es genera automàticament a partir de les entitats utilitzant un mapatge 1 a 1 des de les entitats a les taules, de manera que cada entitat independent té la seva pròpia taula; i cada camp de l'entitat, la seva pròpia columna. Les entitats que són incrustades (Embedded Entity) no disposen d'una taula, sinó que els seus camps es desen com a columnes a la taula de l'entitat a la qual pertanyen. S'utilitzen taules relacionals per a les col·leccions, cosa que permet les relacions N a N.
Per tal de permetre modificacions sobre les dades sense haver de regenerar la base de dades cada vegada, es pot fer una sincronització entre les entitats i la base de dades existent, en la qual el motor generarà un arxiu de script SQL amb les modificacions necessàries per a actualitzar l'esquema.

## Herència d'entitats

Encara que Signum Framework utilitza un sistema de "taula per classe concreta", en el qual es crea una taula per a cadascun dels tipus concrets, permet implementar el concepte d'herència utilitzant relacions polimòrfiques, amb una clau externa que admet valors nuls per a cada possible implementació.

## Interfície d'usuari i WCF

Signum.Windows oferix controls WPF bàsics que aprofiten l'homogeneïtat de les entitats per implementar un comportament automàtic. Aquests controls simplifiquen el desenvolupament de les vistes de les entitats d'una aplicació.
Per a la comunicació entre els clients i el servidor s'utilitzen contractes WCF, que permeten la compartició de tipus. Això facilita reutilitzar les regles de validació de les entitats en el client, i n'eliminen la redundància.
La utilització d'objectes lazy permet treballar amb "petjades" d'una entitat, i permet conèixer-ne el ToString i l'identificador, però sense recuperar l'entitat completa fins que sigui necessari, d'aquesta manera es minimitza la càrrega de treball i la transferència de dades, i augmenta considerablement el rendiment de les aplicacions.

## LINQ

Signum Framework té un proveïdor LINQ complet, de manera que totes les operacions s'executen en LINQ, i internament el motor les tradueix a SQL. Algunes de les característiques del proveïdor de LINQ són les següents:
* Admet joins.
* Admet valors booleans arreu de la consulta.
* Admet GroupJoin i DefaultIfEmpty.
* Admet Group By en C# i VB.NET amb agregats múltiples.
* Admet l'ús de let en les consultes.
* Maneja la construcció d'objectes en memòria dintre de consultes, així com crides a mètodes en memòria.
* Admet tipus anul·lables i conversions implícites.
* Ofereix emulació nadiua de funcions SQL.
* Admet operacions de tipus SelectMany.
A causa d'algunes de les funcionalitats que suporta (en concret les funcions CROSS APPLY / OUTER APPLY), actualment les bases de dades suportades per Signum Framework es limiten a SQL Server 2005 i SQL Server 2008 (tant en les versions Express com en les versions de pagament). La principal diferència entre el proveïdor de LINQ de Signum Framework i altres proveïdors és que no depèn d'un context explícit, condicionat per l'esquema actual de la base de dades, fet que permet escriure una lògica de negoci reutilitzable.

## Història

* 2004 - Primera versió d'un motor ORM basat en els principis de reutilizació i centrat en entitats.
* 2007 - Segona versió del motor ORM, incloent-hi el Gestor d'Operacions i Processos.
* 2008 - Signum Framework 1.0 Beta 1, incloent-hi les funcionalitats de ORM, WPF i LINQ.
* 2009 - Release de Signum Framework 1.0 en Codeplex.
* 2010 - Signum Framework 2.0 Beta 1, amb suport per a. Net Framework 4 i ASP.Net MVC 2.0 (versió interna).
* 2011 - Signum Framework 2.0 Beta 2, amb suport per a ASP.Net MVC 3.0 (versió interna).

## Enllaços externs

* Pàgina oficial de Signum Framework.
* Codi font de Signum Framework Arxivat 2011-02-23 a Wayback Machine..
* Canal de Youtube amb tutorials sobre Signum Framework.
* Lloc web de Signum Software.