Arquitectura de N
Capas: Parte 3 – La Capa de Entidades
Ahora que tenemos el proyecto
armado y la capa acceso a datos y la de entidades, vamos a separar las
entidades que se encuentran dentro del modelo de datos den Entity Framework y
colocarlos en un proyecto aparte.
Cuando en la capa de datos
creamos el modelo de datos, éste se creó de la
siguiente manera:
- ModelGestion.edmx
- ModelGestion.Context.cs
- ModelGestion.Designer.cs
- ModelGestion.edmx.diagram
- ModelGestion.tt
Para separar las entidades, trasladamos
el archivo ModelGestion.tt de la capa de datos a la capa de entidades,
para esto seguimos los siguientes pasos:
- Cerrar las ventanas dentro del Visual Studio.
- Abrir el explorador de Windows.
- Ir a la carpeta de Datos.
- Mover el archivo ModelGestion.tt a la carpeta Entidades.
- Volver a Visual Studio a la capa de entidades.
- Utilizar la opción Show All Files en la capa de presentación para ver el archivo de ModelGestion.tt en la ventana Solution Explorer.
- Integrarlo al proyecto mediante la opción de clic derecho Include in Projet .
- Abrir el archivo ModelGestion.tt.
- Redireccionar, donde está el modelo de datos, de la siguiente manera: conststringinputFile = @"../Datos/ModelGestion.edmx". Lo anterior se hace porque no podemos crearlo mediante: adicionar referencias al proyecto.
- Volver a la capa de acceso a datos y eliminar el link roto del archivo ModelGestion.tt .
- En el nombre del proyecto de Datos usar clic derecho para incluir la referencia al proyecto Entidades.
- Ir a las propiedades del archivo ModelGestion.Context.cs.
- En la opción CustomToolNamespace escribir el nombre de la capa de Entidades.
- Incluir en la clase de acceso a datos el llamado a Entidades: using Entidades.
- Recompilar la solución.
Las imágenes de los pasos las
podrás ver en la Ilustración 1:
Ilustración 1 |
Ahora que tenemos la capa de entidades agreguemos en ella los
metadatos a la entidad Procesos, siguiendo los siguientes pasos:
- Agregar al proyecto la referencia a System.ComponentModel.DataAnnotations.
- Crear una clase ProcesosMD.cs.
- Incluir en la clase:usingSystem.ComponentModel.DataAnnotations.
- Volver pública la clase publicclassProcesosMD .
- Copiar los atributos de la clase ModelGestion / Procesos dentro de ProcesosMD .
- Adicionar los metadatos.
- Al finalizar con la clase ProcesosMD, extendemos las propiedades de la clase
La clase con los metadatos termina así:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
namespace Entidades
{
public class ProcesosMD
{
[Display(Name = "Id")]
public int IdProceso { get; set; }
[Display(Name = "Nombre Proceso")]
[Required(ErrorMessage = "Campo requerido")]
public string NombreProceso { get; set; }
[Display(Name = "Versión")]
[Required(ErrorMessage = "Campo requerido")]
public string Version { get; set; }
[Display(Name = "Fecha de Creación")]
[Required(ErrorMessage = "Campo requerido")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] //Formato de la fecha
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] //Formato de la fecha
public System.DateTime FechaCreacion { get; set; }
}
[MetadataType(typeof(ProcesosMD))]
public partial class Procesos
{
}
}
Algunos de los metadatos que me han sido útiles los puedes
encontrar a continuación:
[DisplayName("Nombre del atributo")]
[Required(ErrorMessage = "Campo
requerido")]
[MaxLength(50, ErrorMessage = "Máximo 50
caracteres")]
[StringLength(50, ErrorMessage = "Máximo 50
caracteres")]
[RegularExpression(@"[a-zA-ZñÑ\s]{2,50}", ErrorMessage = "Solo
letras")]
[RegularExpression("^[0-9]*$", ErrorMessage = "Solo números")]
[Range(0, 999,
ErrorMessage = "Máximo tres números")]
[Range(1000000000,
9999999999, ErrorMessage = "10 números")]
[DataType(DataType.Date)] //Fecha
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] //Formato de la
fecha
[DataType(DataType.Url)]
[DataType(DataType.EmailAddress)]
Aquí finalizamos el ejemplo de la
capa de Entidades, la cual nos facilita el transporte de los datos entre las
demás capas del modelo; recuerden agregar los metadatos a todas las
entidades que lo necesite. Así mismo, es mejor hacerlo en archivos separados
que agregarlos a la entidad, por la sencilla razón que si hay que cambiar el
modelo de datos agregando una propiedad adicional que casi nunca ocurre
(Broma), no perderíamos el trabajo elaborado.
Arquitectura de N Capas: Parte 1 – La base de datos
Arquitectura de N Capas: Parte 2 – La Capa de Acceso a Datos
Para finalizar les recuerdo:
- Cada quien tiene su manera de matar pulgas, así que puede haber una gran cantidad de maneras de hacer el mismo trabajo.
- Estos artículos son ejemplos, así que, si tienes una mejor manera de hacerlo o puedes colaborarme con alguna observación, tu comentario es bienvenido.
- No asumo ninguna responsabilidad por el uso de lo expuesto.
- Si los artículos te son de utilidad, no olvides un “Me Gusta” o dejar algún comentario.