离写上一篇经验总结 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 的定位上看:

  1. 需要 ASP .NET Core 基础,ABP Framework 不是要替代 ASP .NET Core ,而是对 ASP .NET Core 的补充和增强,提供开箱即用的基础设施。
  2. 需要了解软件开发思想,ABP Framework 遵循软件开发最佳实践,启动模板项目采用领域驱动设计(DDD),推荐但不仅限于DDD,所以了解开发指导思想很重要。
  3. 需要了解最新的 .NET Core 技术栈,ABP Framework 是开源项目,充分利用开源生态,整合 .NET Core 最新技术栈,通常的方式是在现有技术之上,提供通用的抽象层,抽象层+提供程序实现特定问题的解决方案,所以我们需要围绕 ABP Framework 掌握更多新技术。
  4. 面向开发者,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爱好者提供学习交流家园!

ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!的更多相关文章

  1. ABP Framework 研习社经验总结(6.28-7.2)

    ABP Framework 研习社经验总结(6.28-7.2) 研习社初衷 在翻译 <实现领域驱动设计>-- 基于 ABP Framework 实现领域驱动设计实用指南 时,因为DDD理论 ...

  2. 翻译《Mastering ABP Framework》

    前言 大家好,我是张飞洪,谢谢你阅读我的文章. 自从土牛Halil ibrahim Kalkan的<Mastering ABP Framework>出版之后,我就开始马不停蹄进行学习阅读和 ...

  3. 《ABP Framework 极速开发》教程首发

    写在发布之前 有没有小伙伴跟我刚开始接触 ABP Framework 的感觉一样"一看文档深似海",看完文档之后,想要上手却找不着头绪. 本套教程写作的目的之一是为初学者提供一条相 ...

  4. Aspect Oriented Programming using Interceptors within Castle Windsor and ABP Framework AOP

    http://www.codeproject.com/Articles/1080517/Aspect-Oriented-Programming-using-Interceptors-wit Downl ...

  5. ABP Framework V4.4 RC 新增功能介绍

    目录 新增功能概述 启动模板删除 EntityFrameworkCore.DbMigrations 项目 CMS-Kit 动态菜单管理 Razor引擎对文本模板的支持 DbContext/Entiti ...

  6. ABP Framework:移除 EF Core Migrations 项目,统一数据上下文

    原文:Unifying DbContexts for EF Core / Removing the EF Core Migrations Project 目录 导读:软件开发的一切都需要平衡 动机 警 ...

  7. ABP Framework 5.0 RC.1 新特性和变更说明

    .Net 6.0 发布之后,ABP Framework 也在第一时间进行了升级,并在一个多星期后(2021-11-16)发布了 5.0 RC.1 ,新功能和重要变更基本已经确定. 5.0版本新特性 新 ...

  8. ABP Framework 5.2 RC 发布及新增功能介绍

    ABP Framework 5.2 RC 新增功能 目录 ABP Framework 5.2 RC 新增功能 单层解决方案模板 EF Core 数据库迁移 UI 和 数据库 选项 API 版本控制 源 ...

  9. ABP Framework 5.3.0 版本新增功能和变更说明

    ABP Framework 5.3.0 稳定版已在2022年6月14日正式发布. 以下是本版本的新增功能: "开始"页面提供创建单层项目选项 启动模板提供 PWA 支持 Volo. ...

随机推荐

  1. mysql数据库-备份与还原-Percona XtraBackup 2.4备份工具使用

    目录 xtrabackup 特点 备份生成的相关文件 xtrabackup 安装 xtrabackup 用法 1 备份 2 预备份 3 还原 4 其他 还原注意事项 xtrabackup实现完全备份及 ...

  2. Runtime PM 处理不当导致的 external abort on non-linefetch 案例分享

    硬件平台:某ARM SoC 软件平台:Linux 1 Runtime PM 简介 在介绍 Runtime PM 之前,不妨先看看传统的电源管理.传统的电源管理机制,称之为 System PM(Syst ...

  3. nmap扫描端口导致线上大量Java服务FullGC甚至OOM

    nmap扫描端口导致线上大量Java服务FullGC甚至OOM 最近公司遇到了一次诡异的线上FullGC保障,多个服务几乎所有的实例集中报FullGC,个别实例甚至出现了OOM,直接被docker杀掉 ...

  4. Go语言设计模式之函数式选项模式

    Go语言设计模式之函数式选项模式 本文主要介绍了Go语言中函数式选项模式及该设计模式在实际编程中的应用. 为什么需要函数式选项模式? 最近看go-micro/options.go源码的时候,发现了一段 ...

  5. toFixed奇葩问题

    1.浮点数运算后的精度问题 在计算商品价格加减乘除时,偶尔会出现精度问题 // 加法 ===================== 0.1 + 0.2 = 0.30000000000000004 0.7 ...

  6. Tengine AIFramework框架

    Tengine AIFramework框架 在开源大势下,以数据.算力.算法为三驾马车的人工智能实现了初级阶段的产业化落地.任何一个技术领域成熟的标志是从应用到平台的成功迭代,AI 也不例外,最终引导 ...

  7. Yolov3&Yolov4网络结构与源码分析

    Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 1. 论 ...

  8. 小程序微信支付(UNIAPP+第三方SDK:binarywang)

    小程序支付流程图说明(UNIAPP+第三方SDK:binarywang) 说明:小程序为UNI-APP开发,使用的第三方微信支付SDK为binarywang提供的,此SDK对微信公众号.小程序.微信各 ...

  9. Zookeeper 面试题(持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  10. 排查bug:竟然是同事把Redis用成这鬼样子,坑了我

    首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象 刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应用,应用恢复正常,于是没做处理.但是后来问题出现频率越来越频 ...