csharp-abp-framework

Desarrollo Rápido de Aplicaciones con ABP Framework en .NET

ABP (ASP.NET Boilerplate) es un framework completo y de código abierto para la construcción de aplicaciones empresariales en .NET.

Ofrece una arquitectura modular, componentes reutilizables y una serie de herramientas que facilitan el desarrollo rápido, mantenible y escalable.

ABP Framework es una infraestructura completa para crear aplicaciones web modernas siguiendo las mejores prácticas y convenciones para desarrollar aplicaciones empresariales, como aplicaciones de gestión de inventarios, CRM, ERP y más.

abp-structure

Incluye todo lo necesario para desarrollar una aplicación, como la arquitectura, la seguridad, la autenticación, la autorización, el manejo de errores, el control de versiones, el mapeo de objetos relacionales, entre otros.

Características de ABP,

  • Arquitectura Modular: Facilita la organización del código en módulos reutilizables.
  • Inyección de Dependencias: Soporte integrado para la inyección de dependencias.
  • ORM: Integración con Entity Framework Core y otros ORMs.
  • Autenticación y Autorización: Soporte para diferentes mecanismos de autenticación y autorización.
  • Internacionalización: Soporte para aplicaciones multilingües.
  • UI: Integración con Blazor, Angular y otros frameworks de UI.
  • Automatización de Tareas: Herramientas para la automatización del desarrollo y despliegue.

Instalación de ABP

Instalación de la Herramienta CLI de ABP

ABP proporciona una herramienta CLI (Command Line Interface) para facilitar la creación y gestión de proyectos. Puedes instalarla globalmente utilizando el siguiente comando:

dotnet tool install -g Volo.Abp.Cli

Creación de un Nuevo Proyecto ABP

Puedes crear un nuevo proyecto utilizando la herramienta CLI de ABP:

abp new MyProject -t app

Este comando crea una nueva solución ABP con una estructura de proyecto predeterminada y varios módulos preconfigurados.

Configuración Inicial

Estructura del Proyecto

Un proyecto ABP típico tiene la siguiente estructura:

  • src: Contiene el código fuente de la aplicación.
    • MyProject.Application: Contiene la lógica de aplicación.
    • MyProject.Domain: Contiene las entidades de dominio y las reglas de negocio.
    • MyProject.EntityFrameworkCore: Configuración de Entity Framework Core.
    • MyProject.HttpApi: Controladores API.
    • MyProject.Web: Proyecto web para la UI.

Configuración de la Base de Datos

ABP utiliza Entity Framework Core como ORM por defecto. Para configurar la base de datos, abre el archivo appsettings.json en el proyecto MyProject.DbMigrator y actualiza la cadena de conexión:

"ConnectionStrings": {
  "Default": "Server=(localdb)\\mssqllocaldb;Database=MyProjectDb;Trusted_Connection=True"
}

Migraciones de Base de Datos

Para aplicar las migraciones de Entity Framework Core, navega al directorio del proyecto MyProject.DbMigrator y ejecuta:

dotnet ef migrations add InitialCreate
dotnet ef database update

Desarrollo de Aplicaciones con ABP

Creación de Entidades de Dominio

Define tus entidades de dominio en el proyecto MyProject.Domain. Por ejemplo, crea una entidad Product:

using Volo.Abp.Domain.Entities;

public class Product : Entity<Guid>
{
    public string Name { get; set; }
    public decimal Price { get; set; }

    public Product(Guid id, string name, decimal price)
    {
        Id = id;
        Name = name;
        Price = price;
    }
}

Repositorios

ABP proporciona interfaces genéricas para los repositorios. Crea un repositorio para la entidad Product:

using Volo.Abp.Domain.Repositories;

public interface IProductRepository : IRepository<Product, Guid>
{
    // Métodos específicos para la entidad Product
}

Servicios de Aplicación

Crea servicios de aplicación para manejar la lógica de negocio. Por ejemplo, un servicio para gestionar productos:

using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;

public class ProductAppService : ApplicationService, IProductAppService
{
    private readonly IProductRepository _productRepository;

    public ProductAppService(IProductRepository productRepository)
    {
        _productRepository = productRepository;
    }

    public async Task CreateProductAsync(string name, decimal price)
    {
        var product = new Product(Guid.NewGuid(), name, price);
        await _productRepository.InsertAsync(product);
    }

    // Otros métodos de servicio
}

Controladores API

Define controladores API en el proyecto MyProject.HttpApi para exponer los servicios de aplicación. Por ejemplo, un controlador para productos:

using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

[Route("api/products")]
public class ProductController : MyProjectController
{
    private readonly IProductAppService _productAppService;

    public ProductController(IProductAppService productAppService)
    {
        _productAppService = productAppService;
    }

    [HttpPost]
    public async Task<IActionResult> CreateAsync(CreateProductDto input)
    {
        await _productAppService.CreateProductAsync(input.Name, input.Price);
        return Ok();
    }

    // Otros métodos de controlador
}

UI con Blazor

ABP soporta la creación de interfaces de usuario con Blazor. Crea componentes en el proyecto MyProject.Web para interactuar con los servicios de aplicación.

@page "/products"
@inject IProductAppService ProductAppService

<h3>Products</h3>

<button @onclick="CreateProduct">Create Product</button>

@code {
    private async Task CreateProduct()
    {
        await ProductAppService.CreateProductAsync("New Product", 10.0m);
    }
}