离写上一篇经验总结 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. lighttpd 轻量级WEB服务器

    Lighttpd 是一款开源 Web 服务器软件.Lighttpd 安全快速,符合行业标准,适配性强并且针对高配置环境进行了优化.相对于其它的 Web 服务器而言,Lighttpd 占用内存更少:因其 ...

  2. skynet debug console 使用

    预读 关于如何使用 skynet 可以参考 wiki 文档 更多实战内容见 https://www.lanqiao.cn/courses/2770 优惠码:2CZ2UA5u 环境测试搭建 使用示例代码 ...

  3. Step By Step(Lua元表与元方法)

    Step By Step(Lua元表与元方法) Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表 ...

  4. Mybatis基础使用方法

    1.首先在数据库中建立一张表 create table login( name varchar(20) not null, username varchar(20) not null, passwor ...

  5. 人体姿态和形状估计的视频推理:CVPR2020论文解析

    人体姿态和形状估计的视频推理:CVPR2020论文解析 VIBE: Video Inference for Human Body Pose and Shape Estimation 论文链接:http ...

  6. 如何为应用选择最佳的FPGA(上)

    如何为应用选择最佳的FPGA(上) How To Select The Best FPGA For Your Application 在项目规划阶段,为任何一个项目选择一个FPGA部件是最关键的决策之 ...

  7. selenium-python元素定位技巧(一)

    在python-selenium元素定位中,有很多小技巧,在此记录总结 技巧一.尽量不要用可见的文本去定位 尽量不要用可见的文本去定位(特别是支持国际化的软件-比如禅道),因为一旦切换语言后,使用该方 ...

  8. 关于web移动端定位

    最近在做一个搜索附近3公里所有超市信息(已经录入数据库的超市信息)的功能.思路很简单只是获取用户当前地理位置(经纬度),通过sql语句筛选出3公里范围内的所有超市信息,然后传递到前台页面展示出来.但是 ...

  9. 【模拟8.01】matrix(DP杂题,思维题)

    很神的题,感谢lnc大佬的指点. 先设1-LL[i]统称左区间,RR[i]-m为右区间 用L[i]统计从1-i列,出现的左区间端点的前缀和,R[i]是右区间.... f[i][j]中j表示当前在第i列 ...

  10. mturoute 最大传输单元路由检测Host

    mturoute检测mtu字符 下载地址:https://www.elifulkerson.com/projects/mturoute.php mturoute.exe                ...