唔,说好的文章,欠了好久,先水一篇。

本系列目录:Abp介绍和经验分享-目录

概述

先表个态:对绝大多数人来说,ABP是成熟的,足以用到生产环境的。

  • 最适合的:业务非常复杂且不追求极致性能的(这里并不是说ABP性能不行),或业务非常成熟稳定直接作为产品(卖软件)或服务(SaaS)进行销售的。
  • 最不适合的:极致追求性能,言必谈性能,不谈业务的。

这里适合和不适合,主要是说投入产出比(不适合的那群人本身就在抗拒着,忙着挑刺)。

当我们遇到需要极致的性能需求的时候,其实重点在于方案如何设计,开发框架和开发语言理应为了性能让步,做出一定取舍,这种时候,ABP的众多特性,其实是被浪费了,所以并不是一个适合的场景。

但是更多时候,我们求的是快速开发,而快速开发(不仅仅是,还要)离不开几个特点:

  1. 先进的建模思想;
  2. 丰富的基础设施;
  3. 开箱即用的基础功能;

上面第二点和第三点ABP有非常强大的优势。而第一点其实是指如何Hold住多变的业务逻辑,以及如何写出可维护性、可扩展性强的代码,主要是看写代码的人本身的功底。而ABP的源码又恰好在这方面有非常优秀的示范作用。

就我们团队的经验来说,从2015年,Abp版本0.7左右开始使用,期间还有一些不成熟的摸索,到今年上半年使用1.4.2以及1.5.0已经基本游刃有余,在三个月时间内开发完公司的两大系统(供应链管理系统和电商平台)。效率之高,也是我从业以来非常罕见的,当然其中团队的磨合也很重要,但Abp在其中起到的作用是非常巨大的。

PS:为啥是1.4.2和1.5.0?今年上半年Abp作者升级太快了,跟不上啊!又怕引入.net core会造成未知风险(后来证明确实如此),就没继续升级跟进了。但是本系列会以当前最新的Abp版本v2.3(本来想说v2.2.2的,结果去看了下,果然又升到v2.3了,所以这是一个非常活跃的项目,别怕没人维护!)作为演示基准。

ABP思想

  1. 基于DDD(领域驱动设计)思想的分层架构;
  2. 模块化设计;
  3. 多租户,SaaS架构支持;
  4. 坚持SOLID,DRY等原则的最佳实践;
  5. UOW(UnitOfWork,工作单元),EventBus,业务逻辑解耦利器;
  6. IoC,依赖注入,本地化语言,泛型仓储,AOP,应用服务直接映射WebApi,聚合根,值对象,等等等等...

借用官网的图:

Don't repeat yourself! 框架替你做重复的事,你只需集中精力处理业务逻辑!和IRepository.Update(entity)说再见,SaveChange以后也只会偶尔露面了。

ABP入门

感谢将ABP介绍到中文社区的朋友们,这段主要是传送门:

  1. 阳铭的博客
  2. ABP框架理论研究总结(较新)

建议想粗略看个大概的朋友可以先看看阳铭的博客,想认真入坑的,可以看tkb的《ABP框架理论研究总结》。

这里把阳铭的博客列在前面是有些私心的,本人到上海工作的原因就是入了abp的坑,并且有幸进入阳铭的团队直到现在,所以领导的博客要靠前点。

HelloWorld, Step By Step,先跑起来

Step 1 快速构建解决方案

点击链接>>Abp官网解决方案自动生成工具

如图,我们选择Asp.Net Mvc 5.x项目,多页Web应用包含module-zero,并且输入解决方案名称(同时是根命名空间)Personball.Demo

点击生成项目

等待下载完成。解压后,得到解决方案:

Step 2 初始化数据库

  1. 右键点击Personball.Demo.Web作为启动项目;
  2. 修改Web.config数据库连接字符串,连接到可用的数据库实例(需要建立一个空数据库Personball_Demo);
  3. 打开程序包管理器控制台,选择Personball.Demo.Entityframework作为当前项目;
  4. 执行Update-Database;

Step 3 启动

最后,F5启动,ok,一切正常!

还可以立即体验到多语言机制哦!

PS 默认账户是admin,密码123qwe

Step 4 Git Init,一切就绪

在程序包管理器控制台,运行如下命令获取vs版gitignore文件

(New-Object System.Net.WebClient).DownloadFile("https://raw.githubusercontent.com/github/gitignore/master/VisualStudio.gitignore","$pwd\.gitignore")

然后执行git初始化命令,添加所有文件,提交。

git init
git add .
git commit -am 'Init'

Ok,一切就绪,赶快去了解业务需求吧!

这篇水完了,后面会有干货的。

[2017-08-07]ABP系列——QuickStartA:概述、思想、入门和HelloWorld的更多相关文章

  1. 快速入门系列--MVC--01概述

    虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...

  2. [2017-08-21]Abp系列——如何使用Abp插件机制(注册权限、菜单、路由)

    本系列目录:Abp介绍和经验分享-目录 Abp的模块系统支持插件机制,可以在指定目录中放置模块程序集,然后应用程序启动时会搜索该目录,加载其中所有程序集中的模块. 如何使用这套机制进行功能插件化开发? ...

  3. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

    ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...

  4. 基于DDD的现代ASP.NET开发框架--ABP系列之2、ABP入门教程

    基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boi ...

  5. 点这里进入ABP系列文章总目录

    基于DDD的现代ASP.NET开发框架--ABP系列之1.ABP总体介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boi ...

  6. [2017-08-28]Abp系列——业务异常与错误码设计及提示语的本地化

    本系列目录:Abp介绍和经验分享-目录 前言 ABP中有个异常UserFriendlyException经常被使用,但是它所在的命名空间是Abp.UI,总觉得和展现层联系过于紧密,在AppServic ...

  7. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录(转)

    出处:http://www.cnblogs.com/mienreal/p/4528470.html ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视 ...

  8. 基于DDD的现代ASP.NET开发框架--ABP系列之1、ABP总体介绍

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之1.ABP总体介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  9. 浅入 ABP 系列(4):事件总线

    浅入 ABP 系列(4):事件总线 版权护体作者:痴者工良,微信公众号转载文章需要 <NCC开源社区>同意. 目录 浅入 ABP 系列(4):事件总线 事件总线 关于事件总线 为什么需要这 ...

随机推荐

  1. redis 一般性使用概述

    最近一段时间与redis接触比较频繁.发现有些东西还是工作中经常会用到的,自己也花了点时间巩固下.本篇文章主要是以总结性的方式梳理,因为redis的主题很大,任何一个技术点展开都是几篇文章的量.也可以 ...

  2. 【EntityFramework 6.1.3】个人理解与问题记录

    前言 又是一个炎热夏日的晚上,开着空调听着音乐又开始了我们今天的博文.此文并不是ROM工具哪家强之类的引战贴,只是本文自己的一点看法和见解,望前辈看官有望斧正 声明 本文欢迎转载,原文地址:http: ...

  3. [BZOJ 4720][NOIP 2016] 换教室

    记得某dalao立了"联赛要是考概率期望我直播吃键盘"的$flag$然后就有了这道题233333 4720: [Noip2016]换教室 Time Limit: 20 Sec  M ...

  4. javascript对象的创建--相对java 怎样去创建了"类"i以及实例化对象

    由于javascript没有java那么多基本类型,同时也没有提供class这个东西,那么我们想实现javascript的对象创建应该怎么办呢,我简单地从w3c提供的课件中提取了一下几种方法: 一.工 ...

  5. ORACLE 11g 静默安装

    整理下以前的文档,放到博客上面来以后能直接找到. 环境:oracle linux release 6.3 x86_84.oracle 11gR2 一.主机环境配置 1.1 gcc安装 在ISO文件的P ...

  6. easyAR图钉功能实现相关

    图钉功能总算做出来了,发现真的是因为没认真看手册导致的=.=[跪 最后的代码很简单,但是过程中看了不少camera/tracker相关的东西,感觉需要整理记录一下 图钉功能记录: 目标:实现用ARCa ...

  7. [补档][COGS 426]血帆海盗

    [COGS 426]血帆海盗 题目 传送门:http://cogs.pro/cogs/problem/problem.php?pid=426 随着资本的扩大,藏宝海湾贸易亲王在卡利姆多和东部王国大陆各 ...

  8. Python爬虫从入门到放弃(二十)之 Scrapy分布式原理

    关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列. 分布式架 ...

  9. 云端TensorFlow读取数据IO的高效方式

    低效的IO方式 最近通过观察PAI平台上TensoFlow用户的运行情况,发现大家在数据IO这方面还是有比较大的困惑,主要是因为很多同学没有很好的理解本地执行TensorFlow代码和分布式云端执行T ...

  10. Java String字符串深入详解

    Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "hello";,另一种就是使用new这种标准的构造对象的方法,如String str = new ...