ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!
离写上一篇经验总结 ABP Framework 研习社经验总结(6.28-7.2) ,已经过去两周。
ABP Framework 研习社(QQ群:726299208) 最近两周,又迎来了很多新伙伴,成员数量上升至300+。
从大家的关注度和群内讨论的活跃度来看, ABP Framework 在国内 .NET 开发社区的人气还是很高的。我们也看到了很多小伙伴已经开始在自己的项目中使用该框架,甚至在群里晒出自己的项目代码,探讨技术解决方案。
回归正题:ABP Framework 为什么好上手,不好深入?
首先要从 ABP Framework 定位开始说起,ABP Framework 是一个基于 ASP .NET Core 的完整的基础设施框架,遵循软件开发的最佳实践,采用最新技术,创建现代网络应用。(摘自官方介绍)
从 ABP Framework 的定位上看:
- 需要 ASP .NET Core 基础,ABP Framework 不是要替代 ASP .NET Core ,而是对 ASP .NET Core 的补充和增强,提供开箱即用的基础设施。
- 需要了解软件开发思想,ABP Framework 遵循软件开发最佳实践,启动模板项目采用领域驱动设计(DDD),推荐但不仅限于DDD,所以了解开发指导思想很重要。
- 需要了解最新的 .NET Core 技术栈,ABP Framework 是开源项目,充分利用开源生态,整合 .NET Core 最新技术栈,通常的方式是在现有技术之上,提供通用的抽象层,抽象层+提供程序实现特定问题的解决方案,所以我们需要围绕 ABP Framework 掌握更多新技术。
- 面向开发者,ABP Framework 为开发者提供底层的基础设施,不是一个开箱即用的系统,是为开发一个系统提供支持的框架。在代码和工作上为开发者提供很多便利。
ABP Framework 最大的特点是模块化,一切皆模块!众多模块中,从单个功能上看,使用是简单的,将常用的配置进行封装,以快速应用;但当多个技术组合使用时,应用难度开始上升,需要很好地驾驭各个模块!
举个例子,最近在分析 eShopOnAbp 源码 v0.1
,项目启动成功之后,发现非常人性化,只要设置好数据库连接字符串,会自动建库、建表、插入默认数据。跟踪项目源码其实现使用 EF Core 数据迁移,为了让数据迁移能够在微服务架构中适用,数据迁移的执行操作放在分布式事件中处理;为了确保数据库结构和数据初始化的数据有效性,又引入工作单元;项目架构支持多租户,所以在数据迁移时单独处理了租户数据库及数据的初始化。
上述处理过程,会综合使用到 ABP Framework 提供的 数据迁移、种子数据、分布式事件总线、工作单元、多租户模块。光看这些术语,就够头大的,更何况看源码。
当然,我们也不要被源码吓到,ABP Framework 中的源码实现、模块设计是非常优雅的,从 eShopOnAbp 项目中摘数据迁移实现的核心代码:
var isMigrationRequired = false;
//切换为当前租户
using (CurrentTenant.Change(null))
{
// 如果需要,则创建数据表
// 开启工作单元(是否需要新的?是;是否需要事务?否)
using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: false))
{
//异步获取所有在程序集中定义但还没有应用到目标数据库的迁移。
var pendingMigrations = await ServiceProvider
.GetRequiredService<TDbContext>()
.Database
.GetPendingMigrationsAsync();
//如果存在迁移
if (pendingMigrations.Any())
{
//通过分布式事务总线发布消息,信息包含 DatabaseName 。
await DistributedEventBus.PublishAsync(
new ApplyDatabaseMigrationsEto
{
DatabaseName = DatabaseName
}
);
isMigrationRequired = true;
}
await uow.CompleteAsync();
}
return isMigrationRequired;
}
对代码做了注释,应该很容易看明白,有框架基础功能支持,在代码层面像搭建乐高积木一样,实现了支持微服务环境下、支持多租户、考虑了数据完整性的自动数据迁移功能!
那么,应该如何从零开始掌握 ABP Framework 呢?有没有捷径?
个人建议是:
- 在学习时,小步快走,各个模块分而治之!不可急于求成。
- 在应用时,采用渐进式,从自己感兴趣或项目需要用到的功能模块开始,框架中每一个模块是可以单独使用、灵活拆分的。
当各个模块都有所熟悉时,开始上项目,在解决问题的过程加深理解。实际项目开发中,并不是要将所有模块都掌握后,才能上手。边用边理解,边实践边总结!
那么,有难度,值不值得我们花比较多时间进行技术积累呢? 掌握之后会不会过时?
个人认为,ABP Framework 是 .NET 开发技术的一个高度,能够应用、读懂源码、二次开发、搭建架构,绝对是技术能力的体现;框架背后的设计思想、编码规范、最佳实践会让开发者受益良多,绝对是你值得投入时间深入、长期学习的开源框架。
对框架的熟悉会有一个过程, ABP Framework 最终指向微服务架构,是初、中级.Net开发往高级开发甚至架构师进阶修炼的路径之一。你值得拥有!
写此文章,算是抛砖引玉!
关注 ABP Framework 最新开发进度,后面还会陆续发布新功能详解、新功能示例等系列文章,敬请关注!
ABP Framework 研习社(QQ群:726299208)
专注 ABP Framework 学习,经验分享、问题讨论、示例源码、电子书共享,欢迎加入!
dotNET兄弟会-公众号
专注.Net开源技术及跨平台开发!致力于构建完善的.Net开放技术文库!为.Net爱好者提供学习交流家园!