Arquitectura de SoftwareUtilizando .net Remoting, Programación en Capas, Programación Orientada a Objetos y patrones de programación, (SqlServer 2000 Back End)Parte IV: Capa de Reglas de Negocios (BO)
Fecha: 10/Ago/2005 (8 de Agosto de 2005)
|
Capa cuya función principal es aplicar todas las condiciones o reglas de negocios para cada método expuesto a través de las fachadas. Por ejemplo, validaciones, condiciones que se deben de cumplir para borrar o guardar el la entidad, cálculos internos, generaciones de pólizas, o afectaciones de saldos a través de otras entidades, etc...
En el caso de que el método no lleve ninguna validación, solo sirve de clase "puente", pero queda preparada la arquitectura para después agregar las condiciones necesarias por la empresa.
En este Assembly, encontramos dos tipos de clases, las de reglas de negocios y las fachadas, de las primeras vemos un ejemplo a continuación, estas clases son llamadas por las fachadas y tienen visibilidad con la Capa de Acceso a Datos. Si alguna regla de negocios necesita de datos, esta capa es la que se encarga de solicitarlos y hacer las operaciones necesarias con ellos, no necesariamente regresarlos hacia la interfaz de usuario. En este ejemplo es muy sencillo, pero si les interesan ejemplos mas complejos, con mucho gusto, solo contactense conmigo.
/// <summary>
/// <summary>
/// Clase para manejar todas las reglas de negocios de Entidad
/// </summary>
internal class EntidadBO
{
/// Constructor
/// </summary>
public EntidadBO(){}
/// <summary>
/// Almacena un Entity.ListaEntidades en la base de datos
/// </summary>
/// <param name="listaEntidades">una entidad Entity.ListaEntidades</param>
/// <returns>"ok" si no ocurrio ningun error, de lo contrario el mensaje de error</returns>
public string Guardar(ref Entity.ListaEntidades listaEntidades)
{
//TODO:Aplicar las reglas de negocios necesarias para el método
//Por ejemplo, validaciones, condiciones que se deben de cumplir para borrar el dato, //cálculos internos, generaciones de pólizas contables, etc...
return new mobileDAL.Entidad().Guardar(ref listaEntidades);
}
/// <summary>
/// Obtiene un Entity.Entidad
/// </summary>
/// <param name="entidadId">Guid para identificar el entidadId</param>
/// <returns>una entidad Entity.Entidad</returns>
public Entity.Entidad TraerEntidades(int entidad)
{
//TODO:Aplicar las reglas de negocios necesarias para el método
return new mobileDAL.Entidad().TraerEntidades(entidad);
}
/// <summary>
/// Obtiene un Entity.ListaEntidades
/// </summary>
/// <returns>una entidad Entity.ListaEntidades</returns>
public Entity.ListaEntidades TraerEntidades()
{
//TODO:Aplicar las reglas de negocios necesarias para el método
return new mobileDAL.Entidad().TraerEntidades();
}
}
A continuación observemos la clase fachada:
/// <summary>
/// Fachada # 1
/// Clase Fachada para manejar todos los metodos expuestos para el sistema "X"
/// </summary>
public class Facade : System.MarshalByRefObject
{
/// <summary>
/// Constructor
/// </summary>
public Facade()
{
}
#region Paises
/// <summary>
/// Almacena un Entity.ListaPaises en la base de datos
/// </summary>
/// <param name="listaPaises">una entidad Entity.ListaPaises</param>
public void GuardarPais(Entity.ListaPaises listaPaises)
{
new mobileBO.PaisBO().Guardar(listaPaises);
}
/// <summary>
/// Obtiene un Entity.Pais
/// </summary>
/// <param name="pais">Guid para identificar el pais</param>
/// <returns>una entidad Entity.Pais</returns>
public Entity.Pais TraerPaises(int pais)
{
return new mobileBO.PaisBO().TraerPaises(pais);
}
/// <summary>
/// Obtiene un Entity.ListaPaises
/// </summary>
/// <returns>una entidad Entity.ListaPaises</returns>
public Entity.ListaPaises TraerPaises()
{
return new mobileBO.PaisBO().TraerPaises();
}
#endregion //Paises
#region Entidades
/// <summary>
/// Almacena un Entity.ListaEntidades en la base de datos
/// </summary>
/// <param name="listaEntidades">una entidad Entity.ListaEntidades</param>
public void GuardarEntidad(ref Entity.ListaEntidades listaEntidades)
{
new mobileBO.EntidadBO().Guardar(ref listaEntidades);
}
/// <summary>
/// Obtiene un Entity.Entidad
/// </summary>
/// <param name="entidadId">Guid para identificar el entidadId</param>
/// <returns>una entidad Entity.Entidad</returns>
public Entity.Entidad TraerEntidades(int entidad)
{
return new mobileBO.EntidadBO().TraerEntidades(entidad);
}
/// <summary>
/// Obtiene un Entity.ListaEntidades
/// </summary>
/// <returns>una entidad Entity.ListaEntidades</returns>
public Entity.ListaEntidades TraerEntidades()
{
return new mobileBO.EntidadBO().TraerEntidades();
}
#endregion //Entidades
}Lo primero que observamos es que tiene herencia de la clase System.MarshalByRefObject, esto es para que pueda ser expuesta a través de el Servicio de Windows .Net Remoting (Ver Parte I), y así pueda ser instanciada remotamente desde la interfaz de usuario. En seguida podemos notar que hace llamadas a las diferentes clases de reglas de negocios, esta clase SI sirve de clase puente, debido a la utilización del patrón "fachada".
Ir a parte V: Interfaz de Usuario (UI)
Espacios de nombres usados en el código de este artículo:
using System;
Fichero con el código de ejemplo: rhernandez_mobileBO.zip - Tamaño 37KB