离写上一篇经验总结 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. cp1 项目管理概述

    项目不成功:问题很多 chapter__1 ① 任务不明确 ② 变更 ③ 新技术 ④ 成本 ⑤ 进度 ⑥ 质量问题 ⑦ 开发混乱 ⑧ 用户 项目定义 项目 (Project) 是为了创造一个唯一的产品 ...

  2. 创建一个本地Yum 仓库,提升速度,减少带宽

    1 mkdir /YUM 2 mount -t iso9660 -o loop /home/dan/Centos-7-x86_x64-DVD.iso /mnt/iso/ 3 rpm -ivh delt ...

  3. php5.6 + apache2.4+mysql5.7 配置

    ----------------------------------------------------- ★软件工具:(下载时注意下载相应版本,不同版本安装细节可能会有差异!!) 1>http ...

  4. 项目中添加lib依赖

    Project Structure-->Artifacts

  5. Windows 下QT程序发布

    方法1:利用QT自带打包工具 1.新建文件夹,把编译好的exe文件放入该文件夹 2.使用QT下的命令行 3.进入该exe所在文件,执行windeployqt xxx.exe,若出现找不到命令的情况 4 ...

  6. Springboot单元测试@RunWith注解

    1.RunWith 注解 RunWith 就是一个运行器 可以在单元测试的时候,自动创建spring的应用上下文 2.正确使用 pom.xml <dependency> <group ...

  7. Redis-内存优化(一)

    一.正确使用redis 数据类型 我们先了解下 String 类型的内存空间消耗问题,以及选择节省内存开销的数据类型的解决方案.例如一个图片存储系统,要求这个系统能快速地记录图片 ID 和图片在存储系 ...

  8. ALD对照CVD淀积技术的优势

    ALD对照CVD淀积技术的优势 ALD 适合制备很薄的高K金属氧化物层,对腔室的真空度要求比较高,对反应气体源及比例的要求也较高. 目前沉积速率还是比较慢,大大限制了其在工业上的推广应用,不过随着设备 ...

  9. JAVA 进行图片中文字识别(准确度高)!!!

    OCR 识别文字项目 该项目 可以进行两种方式进行身份证识别 1. 使用百度接口 1.1 application-dev.yml配置 ocr: # 使用baiduOcr 需要有Ocr服务器 使用百度需 ...

  10. MySQL面试题汇总

    事务是什么? 一系列操作,要么全部完成,要么一个都不做 事务的ACID特性 原子性:一系列操作要么都执行,要么都不执行 一致性:事务执行前后数据完整性不变,如转账前后总金额不变 隔离性:多个事务并发访 ...