正如我在<如何用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. Spring理解IOC,DI,AOP作用,概念,理解。

    IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationCon ...

  2. Python - IPython

    1- IPython简介 HomePage:http://ipython.org/ IPython(interactive Python) provides a rich architecture f ...

  3. 基础 jQuery 实例

    基础 jQuery 实例 jQuery 原则: 由于 jQuery 是为处理 HTML 事件而特别设计的,那么当您遵循以下原则时,您的代码会更恰当且更易维护: 把所有 jQuery 代码置于事件处理函 ...

  4. 过了所有技术面,却倒在 HR 一个问题上。。

    面试问离职原因,这是我们广大程序员朋友面试时逃不开的问题,如果答得不好,可能就影响了你整个的面试结果. 最近在栈长的Java技术栈vip群里,我也看到大家在讨论这个问题,其中有个朋友的回复栈长很有感触 ...

  5. NopCommerce用.net core重写ef

    最近看了NopCommerce源码,用core学习着写了一个项目,修改的地方记录下.项目地址 NopCommerce框架出来好久了.18年的第一季度 懒加载出来后也会全部移动到.net core.那么 ...

  6. python应用-爬取猫眼电影top100

    import requests import re import json import time from requests.exceptions import RequestException d ...

  7. ASP.NET Core微服务+Tabler前端框架搭建个人博客1--开始前想说的话

    写在前面 本人为在读研究生,特别喜欢.NET,觉得.NET的编程方式.语法都特别友好,学习.NET Core已经差不多有一年半了,从一开始不知道如何入门到现在终于可以编写一些小的应用程序,想一想还是非 ...

  8. Kaazing Gateway简单使用

    Kaazing GateWay是一种提供跨平台跨浏览器WebSocket支持的网关,由Java编写,介绍一下Kaazing GateWay的安装配置和简单使用,哪里说得不对,还请指出. 1. 安装 a ...

  9. 深入理解SpringBoot之启动探究

    SpringApplication是SpringBoot的启动程序,我们通过它的run方法可以快速启动一个SpringBoot应用.可是这里面到底发生了什么?它是处于什么样的机制简化我们程序启动的?接 ...

  10. lua中 table 重构index/pairs元方法优化table内存占用

    转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...