ABP之什么是ABP(ASP.NET Boilerplate)

1.介绍

ABP是开源的且文档比较齐全的应用程序框架。其实它不仅仅是个框架,考虑其最佳实践,ABP更提供了基于领域驱动设计(DDD)的强大价格模型。

ABP支持最新的ASP.NET Core和EF Core,同时也支持ASP.NET MVC 5.x和EF 6.x.

2.快速看一个示例

public class TaskAppService : ApplicationService, ITaskAppService
{
    private readonly IRepository<Task> _taskRepository;

    public TaskAppService(IRepository<Task> taskRepository)
    {
        _taskRepository = taskRepository;
    }

    [AbpAuthorize(MyPermissions.UpdateTasks)]
    public async Task UpdateTask(UpdateTaskInput input)
    {
        Logger.Info("Updating a task for input: " + input);

        var task = await _taskRepository.FirstOrDefaultAsync(input.TaskId);
        if (task == null)
        {
            throw new UserFriendlyException(L("CouldNotFindTheTaskMessage"));
        }

        input.MapTo(task);
    }
}

上面是一个Application Service 方法示例,DDD中方的Application Service直接由表示层调用来执行应用程序的用例。

将UpdateTask看成是JavaScript通过AJAX调用的方法。

3.ABP的优势

依赖注入(DI):ABP提供了传统的DI基础设施,由于此类是应用程序服务,因此它通常在DI容器中注册为瞬态(根据请求创建). 它可以简单地注入任何依赖项(例如此示例中的IRepository <Task>)。

仓储:ABP可以为每个实体创建一个默认存储库(例如本例中的IRepository <Task>)。 默认存储库有许多有用的方法,例如本例中使用的FirstOrDefault方法。 我们可以扩展默认存储库以满足我们的需求。 仓储库抽象了DBMS和ORM并简化数据访问逻辑。

授权:ABP可以声明性的检查权限,如果当前用户没有“update tasks”权限或者未登录,ABP会阻止访问UpdateTask方法。ABP不仅使用声明性属性,而且还有其他一些授权方法。

验证:ABP会自动检查输入是否为Null,它还基于标准数据注释属性和自定义验证规则验证输入的所有属性。如果请求无效,则会抛出异常并在客户端进行处理。

审计日志:根据约定和配置,为每个请求自动保存用户,浏览器,IP地址,调用服务,方法,参数,调用时间,执行时长以及其他一些信息。

工作单元:在ABP,每个应用程序服务方法默认都被假设成一个工作单元。它自动的在方法开始时创建一个连接并开始一个事务。如果这个方法没有任何异常的完成,事务会被提交并且释放连接。尽管这个方法用了不同的仓储或者方法,他们都将是原子的(事务的)。当一个事务被提交的时候,对实体的所有修改将会自动被保存。我们甚至不需要调用_repository.Update(task),如上例所示。

异常处理:在一个ABP的web应用程序中,我们几乎从来不用手动去处理异常.默认情况下所有的异常都会被自动处理!如果一个异常发生,ABP会自动记录并向客户端返回正确的结果。比如,如果这是一个AJAX请求,它返回一个JSON对象到客户端标识一个错误的发生。只有在UserFriendlyException情况下,它会隐藏真实的异常。它还可以处理客户端上的错误,并向用户展示相应的信息。

日志:我们可以使用在基类中定义的Logger对象。默认使用Log4Net,但是这个是可更改可配置的。

本地化:注意我们在抛出异常时使用了‘L‘方法? 这样,它会根据当前用户的文化自动进行本地化。

自动映射:在最后一行中,我们使用ABP的MapTo扩展方法将输入属性映射到实体属性。 它使用AutoMapper库来执行映射。 我们可以根据命名约定轻松地将属性从一个对象映射到另一个对象。

动态的API:TaskAppService是一个简单的类。 通常我们必须编写一个包装器API控制器来向JavaScript客户端公开方法,但ABP会在运行时自动执行该操作。 这样,我们可以直接从客户端使用应用程序服务方法。

动态AJAX代理:ABP创建代理方法,这些方法使调用应用程序服务方法就像在客户端上调用JavaScript方法一样简单。

我们可以在这个简单的类中看到ABP的好处。 所有这些任务通常需要花费很长时间,但在ABP中,框架都帮我们做了。我们只需要关注自己真正的业务。

原文地址:https://www.cnblogs.com/yixuanhan/p/9478154.html

时间: 2024-10-10 17:43:41

ABP之什么是ABP(ASP.NET Boilerplate)的相关文章

ABP(ASP.NET Boilerplate Project)学习总结

ABP(ASP.NET Boilerplate Project),现下比较流行的一种web框架,因为公司新项目准备使用这种框架,所以写下这篇文章记录下自己一步一步搭建的过程,就当做是对学习的一个总结与分享. 第一步:通过boilerplate模版创建解决方案 ABP框架官网:http://www.aspnetboilerplate.com/ . 可供选择的体系结构有两种: 1.Single Page Web Application :单页面应用程序 2.Muli Pate Web Applica

ABP (ASP.NET Boilerplate) 应用程序开发框架 新手教学 No.5 建立仓储 Repository

?ABP (ASP.NET Boilerplate) 应用程序开发框架 新手教学 No.0 索引 ABP有内建基本常用的仓储功能例如CRUD,而我们可以进行扩充 在架构上仓储的界面与实践是拆开分别在Domain层与基础设施层的 先说仓储的界面部分 这里来做一个用Map的ID来取得对应Player集合的一个仓储界面 首先一样按照架构我们在Core项目中开一个IRepositories数据夹来放 MyCompany.MyProject.CoreIRepositories 然后我们新增一个界面?IPl

&lt;&lt;ASP.NET Boilerplate 文档&gt;&gt; 1.1 介绍

介绍 一个快速示例 其它特性 启动模板 如何使用 介绍 我们总是对不同的需求开发不同的应用.但至少在某些层面上,一次又一次地重复实现通用的和类似的功能.如:授权,验证,异常处理,日志,本地化,数据库连接管理,设置管理,审核日志等功能.所以我们创建架构和最佳实践,如分层和模块架构,DDD,依赖注入等,并尝试开发应用时基于一些约定. 由于所有这些是非常耗时而且很难单独创建并可适用于每个项目,许多公司创建自己的框架,他们用自己的框架能快速开发新应用而且不出错.但不是所有的公司都是幸运的,大部分公司没有

ASP.NET Boilerplate终于发布v1.0了

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ABP经过2年多的开发,终于发布第一个主要版本了,谨此提醒ABP的使用者. ASP.NET Boilerplate之前顺带介绍过两次.下面直接摘抄一点阳铭的介绍(http://www.cnblogs.com/mienreal/p/4528641.html): ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NE

&lt;&lt;ASP.NET Boilerplate 文档&gt;&gt; 1.2 多层结构

介绍 ABP结构 多层 其它(通用) 其它 领域层(Core) 应用层 基础层 Web和表示层 介绍 一个应用的代码库的分层是一个广为接受的技术,用来减少复杂度和提高代码复用性.为实现分层结构,ABP依照DDD理念,在DDD里有4个基本的层: 表示层:

asp.net boilerplate学习心得

这几天在学习ABP 框架,有不少收获记录下: 1)第一,微软提供了很棒的Demo,看这些demo 比看他的文档收获更大,http://www.aspnetboilerplate.com/Samples, 看 Simple Task Application 就可以 文档地址:http://www.codeproject.com/Articles/791740/Using-AngularJs-ASP-NET-MVC-Web-API-and-EntityFram 2)第二,ABP框架是学习领域驱动设计

abp.event.on与abp.event.off使用

apb的全局事件 var eventName = "app.createOrEditFieldModalSaved"; var reloadPage = function () { dt.ajax.reload(); }; abp.event.on(eventName, reloadPage); //弹窗关闭事件 _modalManager.onClose(function () { //注销事件,要不然多次打开列表后,事件会被重复注册,导致执行多次报错 abp.event.off(e

ASP.NET Boilerplate Zero启动方式

1.打开解决方案还原nuget包 2.设置 ModuleZeroSampleProject.Web 为启动项目[带有有数据库连接字符串的项目] 3.重启vs后.打开  视图>其他窗口>程序包管理器控制台 4.运行两次  update-database -Force 命令 5.修改Configuration.cs  设置  AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; 完成

Asp.Net Boilerplate连接MySQL数据库

1.移除SQL Server的nuget包 uninstall-package microsoft.entityframeworkcore.design uninstall-package microsoft.entityframeworkcore.sqlserver 2.安装MySQL的nuget包. install-package pomelo.entityframeworkcore.mysql.design install-package pomelo.entityframeworkcor