正如我在<如何用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. Python shuffle() 函数

    描述 shuffle() 方法将序列的所有元素随机排序. 语法 以下是 shuffle() 方法的语法: import random random.shuffle (lst ) 注意:shuffle( ...

  2. Tools - 负载性能测试工具JMeter

    JMeter简介 HomePage:http://jmeter.apache.org/ Apache JMeter是Apache组织开发的基于Java的开源负载性能测试工具. 可以用于对服务器.网络应 ...

  3. android发布新版忘记keystore(jks)密码终极解决方案

    android app签名是使用的keystore文件/jks文件,如果是eclipse是keystore,android studio则是jks,如果忘记了的话很悲催: 1.找到密码 2.改应用的包 ...

  4. Express框架之Jade模板引擎使用

    日期:2018-7-8  十月梦想  node.js  浏览:2952次  评论:0条 前段时间讲说了ejs模板引擎,提到了jade的效率等等问题!今天在这里简单提一下jade的使用方式!结合expr ...

  5. Java-jsoup-解析HTML

    /**  * jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操 ...

  6. ES6躬行记(3)——解构

    解构(destructuring)是一种赋值语法,可从数组中提取元素或从对象中提取属性,将其值赋给对应的变量或另一个对象的属性.解构地目的是简化提取数据的过程,增强代码的可读性.有两种解构语法,分别是 ...

  7. Flask入门第一天

    一.flask介绍 flask诞生于2010年,是Armin ronacher用python语言基于Werkzeug工具箱编写的轻量级web开发框架.flask本身相当于一个内核,其他所有的功能都需要 ...

  8. Video for Linux Two API Specification

    V4L2 的使用规范,网址为:https://www.linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.ht ...

  9. 第一册:lesson forty five。

    原文: The boss's letter. A:Can you come here a minute please,Bob? B:Yes,sir. A:Where is C? B:She is ne ...

  10. C#比较两个对象是否为同一个对象。

    两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存. 1.使用object.ReferenceEquals() class Program { static void Main(strin ...