sábado, febrero 4, 2023

Utilizando .net Remoting , Programación en Capas, Programación Orientada a Objetos y patrones de programación, (SqlServer 2000 Back End) – Parte 4

<< Regresar al Indice del Artículo

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>
/// Clase para manejar todas las reglas de negocios de Entidad
/// </summary>
internal class EntidadBO
{

/// <summary>
/// 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>
/// Clase Fachada para manejar todos los metodos expuestos para el sistema «X» 

/// Fachada # 1
/// </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 «fachadabr>

Ir a parte V: Interfaz de Usuario (UI)

<< Regresar al Indice del Artículo

Espacios de nombres usados en el código de este artículo:

using System;

Descargar Solución ArqSoft_mobileBO.zip




Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub

Redes Sociales

2,736FansMe gusta
326SeguidoresSeguir

Popular esta semana

Flutter – Error: ADB exited with exit code 1

En este artículo vamos a explorar algunas posibles causas y solución al error en Flutter Error: ADB exited with exit code 1....
SQL Server MERGE

MERGE en SQL Server para Insert, Delete y Update con dos tablas

Ejemplo práctico usando MERGE para sincronizar dos tablas, Insert, Update y Delete en un solo query. Válido para SQL SERVER 2008 o superior.
SQL Server

Cómo saber la fecha que se modificó un procedimiento almacenado

Poder saber cuales objetos o procedimientos almacenados se modificaron recientemente es muy útil principalmente en bases de datos donde varios desarroladores tienen acceso

Últimos artículos

Como crear una API REST con ASP.NET Core 6.0

Crear una API REST con C# en ASP.NET es un proceso sencillo y rápido que permite exponer un conjunto de recursos a...
Machine Learning & Python

Introducción a Machine Learning en Python

Machine Learning es una rama de la inteligencia artificial que se enfoca en el desarrollo de sistemas que pueden aprender de...
SQL Server MERGE

MERGE en SQL Server, como utilizarlo de forma sencilla

El comando MERGE en SQL Server se utiliza para combinar datos de varias tablas en una sola tabla. Es útil para actualizar...

Índices repetidos en SQL Server ¿Cómo encontrarlos?

Los índices en la base de datos SQL Server es una herramienta que nos ayuda a mejorar la respuesta de nuestras consultas,...