Cuadro de herramientas
El modelo de registro Active, programación orientada al aspecto
Scott Mitchell
Todos los precios confirmado en, 29 de diciembre de 2008 y están sujetos a cambios. Las opiniones expresadas en esta columna son exclusivas del autor y no reflejan necesariamente las opiniones de Microsoft.
Contenido
Implementar el modelo de registro Active en la aplicación .NET
Programación orientada A los aspectos de .NET Framework
Implementar el modelo de registro Active en la aplicación .NET
El modelo de registro activo suele utilizarse en aplicaciones controladas por datos para modelar una tabla de base de datos o vista en términos de una clase, donde se modela una fila de la tabla de base de datos por una instancia de la clase. En este modelo, las propiedades de la clase asignar a columnas de la tabla de base de datos correspondiente.
Métodos de instancia de la clase realizan operaciones en un registro de base de datos, mientras que sus métodos estáticos funcionan con toda la tabla. Por ejemplo, si la base de datos contiene una tabla denominada empleados con columnas EmployeeId como uniqueidentifier, nombre como una nvarchar(50) y Salario como un dinero, para implementar el modelo de registro activo desea crear una clase denominada empleados con propiedades denominadas EmployeeId, nombre y salario. La clase de empleado podría incluir métodos de instancia, como crear, guardar, eliminar y puede incluir métodos estáticos, como DeleteAll, buscar y FindAll.
la figura 1 muestra la trama del registro activo. Se ofrece una sintaxis sencilla intuitiva para trabajar con los datos y es el modelo utilizado por muchas relacional-objeto mappers (o/administrador de recursos).
Figura 1 modelo de registro Active en acción
// 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();
}
El proyecto Castle ActiveRecord (versión 1.0, RC3) ofrece una forma rápida y sencilla para implementar el modelo de registro activo para las aplicaciones basadas en .NET Framework de Microsoft. Se basa en NHibernate, que es una herramienta de O o administrador de recursos gratuita y abrir de origen y se ha revisado en el Columna del cuadro de herramientas de octubre de 2006 .
Uno de los inconvenientes de NHibernate es que tiene un bit de una curva de aprendizaje disminución y requiere que el desarrollador para crear y mantener los archivos de asignación XML que unir las tablas de base de datos, columnas y relaciones con las clases y propiedades de la aplicación. El proyecto de ActiveRecord API encapsula gran parte de esta complejidad mediante atributos de .NET y permite implementar el patrón de registro activo fácil.
Para empezar, descargar el paquete de instalación desde la página del proyecto principal. Esto instala los ensamblados ActiveRecord y NHibernate y hace visible para Visual Studio; agregar estos ensamblados al proyecto. A continuación, cree las clases en la aplicación que utilizará el patrón de registro activo para modelar una tabla de base de datos.
Éste es el código para que se hace referencia en la clase de empleado La 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; }
}
Observe que la clase de empleado extiende la clase ActiveRecordBase y utiliza atributos a las propiedades que corresponden a las columnas de la tabla de base de datos y la columna que sirve como la clave principal de marca. La clase ActiveRecordBase define los métodos de instancia, como crear y guardar y métodos estáticos como Find, FindAll y DeleteAll.
Puede proporcionar más detalles sobre cada miembro de la clase de empleado pasando los parámetros mediante los atributos ClavePrincipal y (propiedad), incluidos la longitud de la cadena de las columnas, si la columna requiere valores únicos, si la columna puede se asigna un valor NULL de base de datos y si se van a omitir la columna al insertar o actualizar una instancia de clase.
Junto con la creación la clase de empleado, también deberá definir parámetros de configuración unos pocos, como la cadena de conexión de base de datos y un conjunto de opciones específicas de NHibernate. Pero no hay necesidad de escribir cualquier código de acceso a datos. Que se controla para usted automáticamente mediante el proyecto ActiveRecord y NHibernate. De hecho, no aún necesita ha creado las tablas de la base de datos en este punto, como el proyecto ActiveRecord puede auto generar las tablas en función de las clases que haya creado.
También se utiliza la sintaxis de atributo del proyecto ActiveRecord para establecer relaciones entre clases. Por ejemplo, los atributos HasMany y BelongsTo pueden utilizarse en una clase principal y secundario, respectivamente, para indicar una relación uno a varios. Imagine que el modelo de datos se expande para incluir una tabla de departamento con columnas DepartmentId y el nombre y una columna DepartmentId en la tabla Empleados establecer una relación uno a varios entre departamentos y empleados. Esta relación se podría modelar en la aplicación agregando una clase de departamento y actualización de la clase de empleado para incluir una nueva propiedad (consulte la figura 2 ).
Clase de empleado de la Figura 2 Agregar
[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; }
}
Observe que la clase de departamento tiene una propiedad Employees (Empleados), que devuelve el conjunto de objetos de empleados de una instancia específica de departamento. De forma similar, el objeto de empleados tiene una propiedad de departamento que devuelve información sobre el departamento al que pertenece el empleado.
El proyecto ActiveRecord facilita empezar a crear arquitectura de la aplicación en parte superior de un marco, NHibernate ha demostrado dar buenos resultado. Dentro de unos minutos puede elaborar clases que utilizan el modelo de registro activo sin necesidad de maestro de sintaxis de configuración XML del NHibernate.
Precio: Gratuita y abrir de origen.
castleproject.org/ActiveRecord
Programación orientada A los aspectos de .NET Framework
Separación de las preocupaciones de resulta un principio fundamental central de ingeniería de software que anima a separar las características y funcionalidad en módulos que no quedan superpuestas de una aplicación. Cada paradigma de programación cuenta con sus propia técnicas para fomentar esto. Lenguajes de programación procedimientos permiten a los desarrolladores encapsulan funcionalidad en subrutinas; lenguajes de programación orientada a objetos utilizar las clases.
Seguridad, registro y el almacenamiento en caché son todos los ejemplos de problemas que normalmente se aplican a varios módulos y, cuando se implementa, como resultado código dispersos en dichos módulos a la que se aplican las reglas. Estos tipos de preocupaciones se dice que entre cortar y se denominan aspectos.
Orientado a los aspectos de programación (AOP) es un paradigma de programación que se centra en controlar la separación de preocupaciones cortar cruzados. AOP permite a los programadores crear aspectos en un módulo único y, a continuación, especificar cuándo estos ejecutarse, anteriores a la ejecución de un método, cuando un método completa con éxito y así sucesivamente.
Por ejemplo, con un desarrollador podría crear un aspecto que se ejecuta antes a de ejecución un método y comprueba que el usuario pertenece a una función en particular y, a continuación, especifica a qué métodos el aspecto AOP aplica. Como resultado, siempre que uno de estos métodos especificados se va para ejecutarse durante el tiempo de ejecución, el correspondiente aspecto código se ejecuta en primer lugar. AOP es normalmente implementa mediante código entrelazadas, lo que implica inyectando el código de aspecto en las zonas apropiadas en el código de aplicación, bien al final de tiempo de compilación o durante el tiempo de ejecución.
Desproteger PostSharp (versión 1.5), un libre, biblioteca open-source creado por Gael Fraiteur que puede utilizar para implementar técnicas de AOP en .NET Framework. En esencia, PostSharp analiza transformaciones y los ensamblados de .NET, lo que permite el código entrelazadas necesarios para implementar AOP.
Creado sobre este principal es PostSharp Laos, un sistema orientado a los aspectos ligero que permite a los desarrolladores crear y utilizar aspectos en términos de atributos personalizados. Los aspectos, a continuación, se pueden aplicar a clases o métodos por decoración de ellos con el atributo personalizado. Como alternativa, aspectos se pueden aplicar a todas las clases o métodos que tienen un determinado modelo de nomenclatura mediante la sintaxis del archivo del proyecto AssemblyInfo.
la figura 3 muestra un ejemplo de un aspecto PostSharp de notificación de error. Este aspecto extiende el OnExceptionAspect, lo que significa que puede ejecutar el aspecto en respuesta a una excepción no controlada, quizás por correo electrónico un detalles del administrador de la excepción. Este aspecto se puede aplicar a un método determinado por la decoración con el atributo OnException, tal como se muestra aquí:
[OnException("admin@contoso.com")]
private void MyMethod()
{
// ...
}
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
}
}
Figura 3 A aspecto PostSharp de notificación de errores
Inmediatamente después de se ha compilado el código, PostSharp modifica el código IL de MyMethod, que rodea a la existente código con un try... catch con una llamada al método OnException dentro del bloque catch. Como resultado, se invoca el aspecto de OnException siempre que hay una excepción no controlada en MyMethod.
Encontrará una extensa documentación en el sitio Web de PostSharp, junto con un panel de mensajes útil. También hay complementos creado por la comunidad, bibliotecas y otras herramientas que utilizan o amplían PostSharp.
Precio: Gratuita y abrir de origen.
postsharp.org
Envíe sus preguntas y comentarios a toolsmm@Microsoft.com .
Scott Mitchell , autor de numerosos libros y fundador de 4GuysFromRolla.com , es un MVP que trabaja con tecnologías Web de Microsoft desde 1998. Scott es un consultor independiente, profesor y escritor. Ponerse en Mitchell@4guysfromrolla.com o a través de su blog en ScottOnWriting.NET .