正如我在<如何用ABP框架快速完成项目(2) - 快的定义!>提到的, 很多同学在使用ABP中遇到很多问题, 花了很多时间和精力, 然而从最根本的角度和方向上来看这些问题应该是不存在。
这些问题如果你正确使用了ABP是根本不会遇到这些问题的.
 
那么如何正确使用ABP呢?
首先我们要与时俱进,既然选择了ABP,其他同时代的技术和思想也要一并选择.
举个例子, 我们既然选择了飞机, 就要把导弹也选上, 不要开着飞机然后用弓箭去和敌人开战.
 
那么同时代和ABP这架飞机匹配的武器有啥呢?
  1. .NET core和Angular/Vue等SPA框架
  2. 微服务
  3. BDD/TDD
  4. DevOps
其中DDD因为和ABP本身绑在一起, 所以就不单列了.
 
我们先从第一个说起, .net core和Angular/Vue等SPA框架
 
  1. ASP.NET MVC 5.x + MPA
  2. ASP.NET MVC 5.x + AngularJS
  3. ASP.NET Core 2.x + MPA
  4. ASP.NET Core 2.x + Angular/Vue.js
 
其中我用过第一个ASP.NET MVC 5.x + MPA和第四个ASP.NET Core 2.x + Angular, 目前正在使用ASP.NET Core 2.x + Angular
为什么我不再使用ASP.NET MVC 5.x版本? 因为:
  1. ABP vNext已经明确不支持.NET, 不支持Asp.NET MVC 5.x, Entity Framework 6
  2. 微软也不再更新ASP.NET MVC 5.x, 全部重心都放在ASP.NET Core
  3. Google自己都抛弃了AngularJS
那么为啥不使用ASP.NET Core 2.x + MPA呢? 因为:
  1. 我本人从来没有编译通过过.NET Core + MPA版本, 看来ABP对这个版本支持力度很小.
  2. 时代趋势是前后端分离, 流行SPA, SPA不但可以在网页端跑还能在PC端(Electorn)和移动端(Ionic)上跑.
 
注: 之前有同学使用ASP.NET MVC 5.x + MPA入门, 花了一个上午都没有跑起来, 原因就是和我从来没有编译通过过.NET Core + MPA版本一样, ABP对这个版本支持力度很小了. 甚至没编译通过都敢Release.
 
微服务和BDD\TDD还有DevOps会在后面章节详细讲, 所以这里就跳过了.
 
然后现在是2018年了, 就不要用1998年的软件开发思维啦. 所以:
  1. 不要升级项目。不要在旧项目上用abp
  2. 通过微服务分隔项目,在小的新项目上用abp
 
1998年的时候, 我们开发软件很期待dll新版本,一有dll新版本就升级. 
因为那时候车马很慢,书信很远,一生只够爱一个人, windows/office两三年才发布一个新版本, 以年为单位
现在基本所有技术都6个月发布一个新版本, 以周以月为单位, 比如我所用的技术:
  1. 去年今日, 用的是Activiti 5, 现在用7, 一年出两个版本
  2. 去年今日, 用的是Angular 4, 现在用7, 一年出三个版本
  3. 常用浏览器基本每6周就发布一个新版本, 请欣赏下图:

    软件更新如此之快, 导致向前兼容性变得很差, 比如:

  1. Angular 1和Angular 2区别巨大,完全是不同两个框架。
  2. Angular 6的Rxjs不兼容Angular5
  3. Angular 7的表单丢弃部分旧版本支持
  4. ABP 3.8 UserManager类去掉CreateIdentityAsync()导致大量代码要重写
  5. ABP经常会有Breaking Changes
也就是说, 2018年和1998年不一样啦, 每次升级都有可能导致程序跑不通了, 要改代码甚至要重写大量代码.
这也是Nuget和NPM存在意义之一.
 
所以不要升级项目, 不要在旧项目上用abp, 因为不但可能要重写大量代码, 甚至因为对abp不熟, 连应该怎样重写都不会.
然后通过微服务分隔项目, 在小的新项目上用abp, 从而避免新旧版本不兼容的灾难.
 
本节文章可能会吓到不少同学, 然而整个行业都是如此, 只要你还在编程届, 想拿高薪, 你必须面对这个事实. F117都退役了, 现在换F35了, 新时代的武器有新时代的玩法.
 
所以有同学问ABP团队现在正在开发新的ABP, ABP vNext, 你怎么看? 我觉得正常! 我们只能适应它.不过ABP vNext还没正式发布, 就算正式发布也得需要一段时间去填坑, 所以不推荐用在正式项目中.
 
一句话做为本节文章的结尾吧: 快马配弓箭, 飞机配导弹, 不要开着飞机却拿着弓箭去和敌人开战. 

https://github.com/aspnetboilerplate/aspnetboilerplate/releases

如何用ABP框架快速完成项目(4) - 如何正确使用ABP?的更多相关文章

  1. 如何用ABP框架快速完成项目(3) - 为什么要使用ABP和ABP框架简介

    首先先讲为什么要使用ABP? 当然是因为使用ABP可以快速完成项目啦. 时间就是金钱, 效率就是生命嘛   有了ABP, 你就节省了写如下模块的时间: CRUD数据库基本操作 校验 异常处理 日志 权 ...

  2. 如何用ABP框架快速完成项目(11) - ABP只要加人即可马上加快项目进展- 全栈篇(2) - 不推荐模块组件化, 推荐微服务

    一个人写代码不需要担心会和别人的代码冲突, 不需要做代码合并, 不需要担心自己的代码被覆盖. 但是多个人一起写代码就需要担心这些问题.   解决这些问题的方法很多, 比如用AzureDevOps(TF ...

  3. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇)(1) - 目录

    昨天发表了<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>后,大家十分热情,几个小时内就收到了不少问题,包括: 对于ui自动化测试这方 ...

  4. 如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor

    要想快速完成一个项目, 自动化是很关键很有用的一块. 自动化测试比人工测试快很多. 特别是在回归测试中. 实践证明, 虽然投入了时间在写自动化测试代码上, 但是在回归测试中节省了大量的时间,同时及时发 ...

  5. 如何用ABP框架快速完成项目(8) - 用ABP一个人快速完成项目(4) - 能自动化就不要手动 - 使用自动化测试(BDD/TDD)

    做为一个程序员, 深深知道计算机自动化的速度是比人手动的速度快的, 所以”快速”完成项目的一个重要武器就是: 能自动化就不要手动.   BDD/TDD有很多优势, 其中之一就是自动化, 我们这节文章先 ...

  6. 如何用ABP框架快速完成项目(5) - 用ABP一个人快速完成项目(1) - 使用代码生成器

    用ABP一个人快速完成项目有如下要点: 站在巨人的肩膀上 - 使用代码生成器 站在巨人的肩膀上 - 使用成熟控件框架, 一个框架不够就上两个, 两个不够就上三个 通过微服务模式而不是盖楼式来避免难度升 ...

  7. 如何用ABP框架快速完成项目(10) - ABP只要加人即可马上加快项目进展- 全栈篇(1) - 发挥DDD理论优势的时候到了!

    正如我在<程序员英语二三事(2) - 从听开始>里说的, 任何技术/工具/语言都有其适用场景和上下文环境. DDD理论同样是如此.   现在, 终于到了发挥DDD理论优势的时候啦!   一 ...

  8. 如何用ABP框架快速完成项目(7) - 用ABP一个人快速完成项目(3) - 通过微服务模式而不是盖楼式来避免难度升级和奥卡姆剃刀原理

    这节文章十分重要!十分重要!十分重要!   很多同学在使用ABP的过程中遇到很多问题, 花费了很多时间和精力都还无法解决, 就是卡在这节文章这里.   Talk is cheap, just show ...

  9. 如何用ABP框架快速完成项目(6) - 用ABP一个人快速完成项目(2) - 使用多个成熟控件框架

    正如我在<office365的开发者训练营,免费,在微软广州举办>课程里面所讲的, 站在巨人的肩膀上的其中一项就是, 尽量使用别人成熟的框架. 其中也包括了控件框架   abp和52abp ...

随机推荐

  1. MyBatis 多表关联查询

    多表关联查询 一对多 单条SQL实现. //根据部门编号查询出部门和部门成员姓名public dept selectAll() thorws Excatipon; //接口的抽象方法 下面是对应接口的 ...

  2. Git基本命令 -- 历史

    历史. 收先需要了解一下git log命令, 使用git的帮助看看: git help log: 执行该命令后, 我的win10弹出来一个html页面, 里面是git log命令的帮助: 首先看看gi ...

  3. DDD实战进阶第一波(十三):开发一般业务的大健康行业直销系统(订单上下文领域逻辑)

    前一篇文章主要讲了订单上下文的POCO模型,其中订单与订单项中有大量的值对象.这篇文章主要讲讲这些值对象以及订单项.订单相关的领域逻辑. 1.ProductSKUs值对象领域逻辑:ProductSKU ...

  4. mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间

    1.当前日期 select DATE_SUB(curdate(),INTERVAL 0 DAY) ; 2.明天日期select DATE_SUB(curdate(),INTERVAL -1 DAY) ...

  5. 关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手

    关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手   本人菜鸟一枚,最近公司有需求要用到富文本编辑器,我选择的是百度的ueditor富文本编辑器,闲话不多说,进入正 ...

  6. Set存储元素为啥是唯一的(以HashSet为例源码分析)

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作,如有错误之处忘不吝批评指正! 说些废话 以前面试的时候会遇到有人问Set 和list的区别 这个很好答,但 ...

  7. MongoDB 生产环境笔记

    目录 MongoDB 生产环境笔记 一.vm.zone_reclaim_mode 参数 二.添加 swap 分区 三.设置 swappiness 参数 四.内核和文件系统版本 五.禁用 Transpa ...

  8. 【原创】驱动卸载之DeleteService

    BOOL WINAPI DeleteService( _In_ SC_HANDLE hService ); 函数作用:从SCM数据库中标志一个服务已删除 参数: 1. OpenService 或Cre ...

  9. Go内置函数cap

    func cap(v Type) int 返回指定类型的容量,根据不同类型,返回意义不同. 数组: 元素个数 (和len(v)一样). 数组指针: *v的元素个数 (和len(v)一样). Slice ...

  10. solr查询工作原理深入内幕

    1.什么是Lucene? 作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用, ...