Condividi tramite


Il presente articolo è stato tradotto automaticamente.

Casella degli strumenti

Il modello di record Active, programmazione A aspetto

Scott Mitchell

Tutti i prezzi confermata in dicembre 29, 2008 e sono soggette a modifiche. Le opinioni espresse in questa colonna rappresentano unicamente parere dell'autore e non riflettono necessariamente le posizioni di Microsoft.

Contenuto

Implementare il modello di record Active in un'applicazione .NET
Programmazione A aspetto in .NET Framework

Implementare il modello di record Active in un'applicazione .NET

Il modello di record attivo viene comunemente utilizzato in basate sui dati applicazioni per modellare una tabella di database o una vista in termini di una classe in cui una riga di tabella del database è modellata da un'istanza della classe. In questo modello proprietà della classe vengono mappate alle colonne della tabella di database corrispondente.

I metodi di istanza della classe eseguono operazioni su un record di database, mentre i relativi metodi statici con la tabella intera. Ad esempio, se il database contiene una tabella denominata Dipendenti con colonne EmployeeId come uniqueidentifier, nome come un nvarchar(50) e stipendio come un denaro per implementare il modello di record attivo è sarebbe creare una classe denominata Impiegati con proprietà denominate EmployeeId, nome e Stipendio (Salary). Classe Employee potrebbe includere metodi di istanza, ad esempio creare, Salva, Elimina e può includere metodi statici quali DeleteAll, ricerca e FindAll.

Nella figura 1 è illustrato il motivo del record attivo. Offre una sintassi semplice e intuitiva per l'utilizzo dei dati ed è il modello utilizzato da molti mappers relazionali a oggetti (o/gestore delle risorse).

Figura 1 modello di record Active in azione

// Add Andrew Fuller as a new employee  
Employee emp = new Employee();
emp.Name = "Andrew Fuller";
emp.Salary = 50000.00M;
emp.Create();

// Give a 10% raise to all employees 
Employee[] allEmployees = Employee.FindAll();
foreach (Employee current in allEmployees)
{
    current.Salary *= 1.10M;
    current.Save();
} 

Il progetto ActiveRecord Castle (versione 1.0, RC3) fornisce un metodo rapido e semplice per implementare il modello di record attivo per applicazioni basate su .NET Framework Microsoft. Incorporato di NHibernate, che è uno strumento o/gestore delle risorse libero, apertura e di origine e di è stato revisionato nel Colonna della casella degli strumenti di ottobre 2006.

Uno degli svantaggi di NHibernate è che è un po'di una curva di apprendimento steep e richiede allo sviluppatore di creare e gestire i file di mapping XML che collegare tra loro le tabelle di database, colonne e le relazioni con le classi e proprietà nell'applicazione. Il progetto ActiveRecord API incapsula gran parte questo complessità utilizzando gli attributi .NET e rende implementa il modello di record attivo semplice.

Per iniziare, scaricare il pacchetto di installazione dalla home page del progetto. Questo consente di installare l'assembly ActiveRecord e NHibernate rende visibile a Visual Studio e aggiunta questi assembly al progetto. Successivamente, creare le classi di applicazione che verrà utilizzato il modello di record attivo per una tabella di database del modello.

Questo è il codice per la classe dipendente a cui fa riferimento Nella figura 1 :

[ActiveRecord]
public class Employee : ActiveRecordBase<Employee>
{
    [PrimaryKey] public Guid EmployeeId { get; set; }
    [Property] public string Name { get; set; }
    [Property] public decimal Salary { get; set; }
}

Si noti che la classe Employee estende la classe ActiveRecordBase e utilizza gli attributi per flag quali proprietà mappare a colonne della tabella di database e quale colonna viene utilizzato come chiave primaria. La classe ActiveRecordBase definisce i metodi di istanza come creare e salvare e metodi statici inclusi trova, FindAll e DeleteAll.

È possibile fornire ulteriori dettagli su ogni membro di classe Employee passando i parametri tramite gli attributi PrimaryKey e proprietà, tra cui la lunghezza della stringa in colonne, se la colonna richiede univoci per i valori, se la colonna può essere assegnata un valore NULL di database e se ignorare la colonna di inserimento o aggiornamento di un'istanza della classe.

Insieme a creare la classe dipendente, è inoltre necessario definire alcune impostazioni di configurazione, ad esempio la stringa di connessione al database e pochi delle opzioni specifiche NHibernate. Ma c'è necessario scrivere codice di accesso ai dati. Che è gestita per consentire automaticamente da progetto ActiveRecord e NHibernate. Infatti, è non ancora necessario creati le tabelle del database a questo punto, come il progetto ActiveRecord possibile automaticamente generare le tabelle in base alle classi create.

La sintassi di attributo del progetto ActiveRecord viene inoltre utilizzata per stabilire relazioni tra classi. Ad esempio, gli attributi HasMany e BelongsTo utilizzabile in una classe padre e figlio, rispettivamente, per indicare una relazione uno-a-molti. Si supponga che il modello di dati è stato espanso per includere una tabella del reparto con colonne DepartmentId e il nome e una colonna DepartmentId nel tabella Employees +++ definizione una-a-relazione molti tra i reparti e i dipendenti. Questa relazione viene modellata nell'applicazione aggiungendo una classe di reparto e l'aggiornamento classe Employee per includere una nuova proprietà (vedere la Figura 2 ).

Nella figura 2 Aggiunta dipendente classe

[ActiveRecord]
public class Department : ActiveRecordBase<Department>
{
    [PrimaryKey] public int DepartmentId { get; set; }
    [Property] public string Name { get; set; }
    [HasMany(typeof(Employee))] public IList Employees { get; set; }
}

[ActiveRecord]
public class Employee : ActiveRecordBase<Employee>
{
    ...
    [BelongsTo("DepartmentId")] public Department Department { get; set; }
}

Si noti che la classe di reparto è una proprietà Dipendenti (Employees), che restituisce il gruppo di oggetti dipendenti per una specifica istanza di reparto. Allo stesso modo, l'oggetto dipendente dispone di una proprietà di reparto che restituisce informazioni al reparto a cui appartiene il dipendente.

Il progetto ActiveRecord semplifica le operazioni iniziare la creazione di architettura dell'applicazione nella parte superiore di un framework consolidato, NHibernate. Entro pochi minuti è possibile creazione classi che utilizzano il modello di record attivo senza dover master sintassi di configurazione XML del NHibernate.

Prezzo: Gratuito, apertura e di origine.

castleproject.org/ActiveRecord

Programmazione A aspetto in .NET Framework

Separazione dei problemi è un principio di software engineering incoraggia la separazione di caratteristiche e le funzionalità in moduli non sovrapposte un'applicazione centrale. Ogni paradigma di programmazione ha il proprio tecniche per questo tempo. Linguaggi di programmazione procedurali consentono agli sviluppatori incapsulare funzionalità nella subroutine; linguaggi di programmazione orientato a oggetti utilizzano classi.

La protezione, registrazione e la memorizzazione nella cache sono tutti gli esempi di problemi che in genere alle più moduli e, quando viene implementato, causare codice dispersi in tali moduli a cui applicano le regole. Questi tipi di problemi di dotati di essere tra le operazioni di taglio e sono detti aspetti.

Programmazione orientati aspetto (AOP) è un paradigma di programmazione viene illustrata la gestione la separazione dei problemi di taglio incrociata. AOP consente agli sviluppatori di creare gli aspetti in un singolo modulo e quindi specificare quando questi esegue, precedente all'esecuzione di un metodo, al completamento di un metodo con esito positivo e così via.

Ad esempio, con uno sviluppatore può creare un aspetto che viene eseguito prima per l'esecuzione di un metodo e viene verificato che l'utente appartiene a un ruolo specifico e quindi specifica quali metodi l'aspetto AOP applica. Di conseguenza, ogni volta che uno di questi metodi specificati è sta per essere eseguito durante la fase di esecuzione, il corrispondente aspetto codice eseguito prima. AOP viene in genere implementata attraverso codice Componi, che richiede di inserire il codice di aspetto nelle aree appropriati nel codice dell'applicazione, alla fine di fase di compilazione o durante la fase di esecuzione.

Estrarre PostSharp versione 1.5, un libero, creato da Fraiteur Gael raccolta di apertura e di origine che è possibile utilizzare per implementare le tecniche AOP in .NET Framework. Alla relativa base PostSharp analizza e trasforma assembly .NET, consentendo il codice che componi necessario implementare AOP.

Creato sopra questa base è PostSharp Laos, un sistema orientato ai aspetto leggero che consente agli sviluppatori di creare e utilizzare gli aspetti in termini di attributi personalizzati. Quindi è possibile applicare gli aspetti a classi o metodi da essi decorazione con l'attributo personalizzato. In alternativa, è possibile applicare gli aspetti a tutte le classi o metodi che dispongono di un determinato modello di denominazione tramite la sintassi, file AssemblyInfo del progetto.

Nella figura 3 viene illustrato un esempio di un aspetto PostSharp di notifica di errore. Questo aspetto estende il OnExceptionAspect, che significa che l'aspetto può eseguito in risposta a un'eccezione non gestita, ad esempio Invia dettagli un amministratore dell'eccezione. Questo aspetto è possibile applicare a un metodo specifico, decorazione con l'attributo OnException, come illustrato di seguito:

[OnException("admin@contoso.com")]
private void MyMethod()
{
    // ...
}

Figura 3 A PostSharp aspetto per notifica errori

public class OnExceptionAttribute : OnExceptionAspect
 {
    public string ToAddress { get; set; }

    public OnExceptionAttribute(string to)
    {
        ToAddress = to;
    }

    public override void OnException(MethodExecutionEventArgs e)
    {
        // TODO: Send ToAddress an e-mail detailing the exception details.
        // Exception details available in the MethodExecutionEventArgs object
    }
}

Immediatamente dopo che il codice è stato compilato, PostSharp modifica il codice IL di MyMethod, circostante esistenti codice con una try... catch con una chiamata al metodo OnException all'interno del blocco catch.Di conseguenza, l'aspetto OnException viene richiamato ogni volta che vi è un'eccezione non gestita in MyMethod.

Sarà possibile trovare documentazione estesa il sito Web di PostSharp, insieme a un'area utile messaggio.Vi sono inoltre creata comunità plug-in, raccolte o altri strumenti che utilizzano o estendono PostSharp.

Prezzo:Gratuito, apertura e di origine.

postsharp.org

Inviare domande e commentitoolsmm@Microsoft.com.

Scott Mitchell, autore di numerosi libri e fondatore di4GuysFromRolla.com, è un MVP che lavora con tecnologie Web di Microsoft dal 1998.Scott è un consulente indipendente, un trainer e un writer.Contattarlo inMitchell@4guysfromrolla.como tramite il suo blogIndirizzo ScottOnWriting.NET.