Cuando trabajamos en aplicaciones empresariales, nuestro trabajo es escribir una lógica empresarial que implemente las reglas empresariales, es decir, las reglas que nuestra empresa ha especificado para su aplicación. ¿Cómo podemos hacer este trabajo más fácil? Una forma es utilizar el patrón de diseño de especificación. El patrón de diseño de especificación proporciona una forma flexible de definir y combinar reglas o condiciones comerciales de una manera reutilizable y fácil de mantener, promoviendo así la separación de preocupaciones y reduciendo la duplicación de código. En este artículo, presentaré el patrón de diseño de especificación y mostrar cómo podemos aprovecharlo en C#, proporcionando una serie de ejemplos de código para ilustrar los conceptos. Cree un proyecto de aplicación de consola en Visual Studio En primer lugar, creemos un proyecto de aplicación de consola .NET Core en Visual Studio. Suponiendo que Visual Studio 2022 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un nuevo proyecto de aplicación de consola .NET Core. Inicie el IDE de Visual Studio. Haga clic en «Crear nuevo proyecto». En la ventana «Crear nuevo proyecto», seleccione «Aplicación de consola (.NET Core)» de la lista de plantillas que se muestran. Haga clic en Siguiente. En la ventana «Configura tu nuevo proyecto», especifica el nombre y la ubicación del nuevo proyecto. Haga clic en Siguiente. En la ventana «Información adicional» que se muestra a continuación, elija «.NET 7.0 (soporte estándar)» como la versión de Framework que le gustaría utilizar. Haga clic en Crear. Usaremos este proyecto de aplicación de consola .NET 7 para trabajar con el patrón de diseño de especificación en las secciones siguientes de este artículo. ¿Qué es el patrón de diseño de especificación? El patrón de diseño de especificación proporciona un enfoque modular y estructurado para definir las reglas de su negocio y combinar ellos en la aplicación. Esto le permite hacer que su código fuente sea más fácil de mantener, probar y reutilizar mientras encapsula las reglas comerciales dentro de objetos de especificación. Al utilizar un patrón de diseño de especificación, se aísla la lógica de validación de las entidades comerciales a las que se aplica. Esto se logra introduciendo un objeto de especificación que encapsula una condición y expone un método para determinar si un objeto en particular la satisface. ¿Por qué utilizar el patrón de diseño de especificación? En el patrón de especificación, los criterios y reglas se definen, encapsulan y se vuelven reutilizables usando un enfoque orientado a objetos. Esto, a su vez, mejora la organización, la capacidad de prueba y la reutilización de su código. Las reglas y condiciones comerciales se pueden representar más fácilmente cuando se utiliza el patrón de diseño de especificación. Al utilizar el patrón de especificación, puede: Modularizar el código: las especificaciones encapsulan reglas y condiciones comerciales en clases separadas, haciéndolas más fáciles de entender, modificar y mantener. Además, ayudan a mantener una base de código limpia y enfocada al aislar las preocupaciones en una aplicación. Mejorar la reutilización: las especificaciones se pueden reutilizar con una lógica de validación similar en todas las partes de la aplicación. Puede evitar la duplicación de código y garantizar una validación coherente en todo el sistema encapsulando las reglas en objetos de especificación reutilizables. Composición dinámica: las especificaciones se pueden combinar utilizando operadores lógicos como Y, O y NO para crear condiciones complejas. La combinación de múltiples especificaciones le permite crear consultas o filtros dinámicos. Optimice las pruebas: las especificaciones representan reglas comerciales individuales, lo que hace que sea fácil probarlas de forma aislada. Como resultado, las pruebas unitarias son más fáciles de escribir y la lógica de validación es más sólida. Implementación del patrón de diseño de especificación en C# Para comenzar a implementar el patrón de especificación, primero puede diseñar la interfaz ISpecification. Esto tendrá un método llamado IsSatisfied que acepta un objeto como parámetro y devuelve un valor booleano en función de si el objeto pasado como parámetro satisface la especificación requerida.interfaz pública ISpecification
{ bool Está satisfecho (elemento T); }Ahora podemos crear una clase llamada IncentiveSpecification que verifica si un empleado es elegible para recibir incentivos como se muestra en el fragmento de código que se muestra a continuación.public class IncentiveSpecification: ISpecification
{ public bool está satisfecho
{ return empleado.Básico >=5000 && empleado.IsFullTime; } }En el fragmento de código anterior, el método IsSatisfied comprueba si la propiedad básica del empleado es mayor o igual a 5000 y si el empleado es un empleado de tiempo completo. Si se cumple esta condición, el código devuelve verdadero; en caso contrario, falso. Creación y combinación de especificaciones en C#El patrón de diseño de especificaciones facilita la combinación de especificaciones. Puede combinar especificaciones utilizando los operadores lógicos (Y, O, NO) para representar condiciones complejas en el código de su aplicación. Cree una nueva clase base abstracta de C# denominada Especificación e ingrese el siguiente código.clase abstracta pública EspecificaciónBase
{ public abstract bool IsSatisfied(T elemento); Especificación pública
{Base de especificación privada de solo lectura
{Base de especificación privada de solo lectura
{Base de especificación privada de solo lectura
{ public override bool IsSatisfied(Empleado empleado) { return empleado.IsFullTime; } } clase pública Especificación básica: Especificación
{ public override bool IsSatisfied(Empleado empleado) { return empleado.Básico >= 5000; } }Validar especificaciones frente a condicionesFinalmente, puede escribir el siguiente fragmento de código para comprobar si se cumplen las condiciones. Empleado empleado = nuevo Empleado(); empleado.FirstName = «Joydip»; empleado.Apellido = «Kanjilal»; empleado.Básico = 1000; empleado.IsFullTime = verdadero; var especificación básica = nueva especificación básica(); var fullTimeSpecification = nueva FullTimeSpecification(); var especificación compuesta = nueva especificación y
Source link
Deja una respuesta