• ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!


    离写上一篇经验总结 ABP Framework 研习社经验总结(6.28-7.2) ,已经过去两周。

    ABP Framework 研习社(QQ群:726299208) 最近两周,又迎来了很多新伙伴,成员数量上升至300+。

    image

    从大家的关注度和群内讨论的活跃度来看, 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爱好者提供学习交流家园!

    image

    记录技术修行中的反思与感悟,以码传心,以软制道,知行合一!
  • 相关阅读:
    C语言堆栈入门——堆和栈的区别
    Unity时钟定时器插件——Vision Timer源码分析之一
    UNITY3D 2D物流流体插件下载|Liquid Physics 2D
    Unity3d插件Master Audio AAA Sound v3.5
    游戏行业的女性拥有强大的新盟友:Facebook
    Unity游戏设计与实现 南梦宫一线程序员的开发实例
    Unity4.6证书激活问题
    里诺全系列注册机+暗桩patch
    冰点还原8.53破解版
    NSE: known a priori estimate
  • 原文地址:https://www.cnblogs.com/wl-blog/p/15009473.html
Copyright © 2020-2023  润新知