ABP能快速把权限、多租户、审计、UoW 搭起来,但实际用下来比较烦的几点
1. 自定义异常过滤器,得先移除框架自带的
统一异常格式、业务错误码、日志脱敏,一般会自己写一个异常过滤器;但ABP 全局已经挂了 AbpExceptionFilter,异常会被它吃掉,再包装成框架自己的错误结构返回。
正确做法是先从 MVC 过滤器里把默认那个移除,再挂自己的:
Configure<MvcOptions>(options =>
{
options.Filters.RemoveAll(f => f is ServiceFilterAttribute s
&& s.ServiceType == typeof(AbpExceptionFilter));
options.Filters.Add<YourExceptionFilter>();
});
2. 操作默认开事务,容易拖成大事务
ABP 的工作单元默认开着。控制器里非 GET(POST、PUT、DELETE 等)会自动开库事务,ApplicationService 方法也一样。
请求一开始就 BEGIN,整个 Action 结束才 COMMIT。中间如果调第三方、导 Excel、发邮件、上传文件、循环处理大批数据,数据库连接和锁会一直占着,这就是长事务:
- 连接池被占满,别的请求开始排队
- 行锁、表锁拖久了,别的业务一起堵
- 超时或进程挂了,回滚成本也大
线上慢、锁等待,长事务首先从这里排查。
3. 模板分层太重,启动慢、内存占用大
标准模板一拉就是 Host、HttpApi、Application、Domain、EFCore、Client 一串项目。加个字段经常是:实体 → 仓储/EF 配置 → AppService → DTO → AutoMapper → 控制器,改起来路径长,这可能也是DDD范式的繁琐
更明显的是运行成本。模块、拦截器、AutoMapper、动态代理、权限/审计/UoW 这些启动时都要扫、注册、织进去,空项目起来都比普通 ASP.NET Core 慢一截,热重载也不快。进程常驻后内存也偏高,本机调试开几个实例就涨得明显。项目不大时,abp就成了负担。