ABP项目概述
在系统性介绍整个ABP框架之前,我们首先需要对ABP框架有一个大概的了解,ABP框架的全称是:Asp.Net Boilerplate Project(即Asp.Net 的样板项目)顾名思义就是能够通过当前的项目模板来进行快速的Asp.Net开发,这个项目是一个GitHub上面非常流行的开源项目,整个项目的地址请点击这里,这个一个非常流行的框架,通过这个框架能够快速搭建Asp.Net项目,而且能够做到项目之间的分层,层与层之间通过接口进行调用,而且能够最大程度上保证整个项目层与层之间的松散耦合,从而做到真正地高内聚和低耦合,而且整个项目真正做到了DDD(领域驱动设计)思想,我们知道在领域驱动设计中,我们可以将整个系统分为四个大的层次,每一个层次都有其特定的功能,所以整个项目整体结构是非常清楚的,下面我们来逐一对这个框架进行论述。
一 概述
首先看看官方文档对其的解释
1 什么是Asp.Net Boilerplate?
ABP是一个新的现代网站应用程序的初始环境;它使用了最佳实践和许多受欢迎的工具。它的目标是成为一个所有人都可以使用,一个适用各种项目目标的应用程序框架以及项目样版。它做了那些事呢?
服务器端
A 基于最新版的ASP.Net MVC和WebAPI
B 实现了领域驱动设计(Domain Driven Design)(实体, 仓储, 领域服务, 应用服务, 数据传输对象, 工作单元... 等等)
C 实现了分层架构(Layered Architecture)(领域层, 应用层, 表现层和基础设施层)
D 提供一个开发上可重用的基础结构以及针对大型项目所需要的模块,并且这些模块都是可组合式的
E 采用那些你已经(或可能)已经在使用的最受欢迎框架/类库
F 提供一个基础且更易于使用的依赖注入机制(使用Castle Windsor作为DI的容器)
G 提供一个严谨的对象模型和基类,轻易的通过对象关系映射(Object-Relational Mapping)。(直接支持EntityFramework和NHibernate)。
H 支持且实现了数据库迁移(database migration)。
l 引入了一个简单且具弹性的多语言(localization)系统。
J 为服务器端的全局领域事(domain event)件引入了事件总线(EventBus)
K 管理异常处理和验证
L 为应用服务创建了动态Web API层
M 提供基类和帮助类予当你需要实现某些通用任务时
N 使用约定大于配置
客户端
A 为单页面应用(Single-Page Application)(有AngularJs和Durandaljs)和多页面应用提供项目样版。样版都是基于Twitter Bootstrap。
B 流行的Javascript类库都被引入进来,并且都已套用预设的配置
C 为了让调用应用服务(注: 使用动态的Web API层)变得更容易而创建动态Javascript代理(dynamic javascript proxies)
D 为了某些传递讯息型任务(Summon task)而引入一些独特的API,而所谓的传递讯息任务像是: 显示警告和通知,阻塞式UI,发出Ajax请求....等等。
除了上述的那些基础设施,还有一个名叫zero的模块正在开发中。它将会提供基于角色和权限的授权系统(实现最终版本的ASP.Net Identity Framework),也提供配置系统,多租户...等等能力。
2 ABP中的分层架构
ABP系统中采用DDD(领域驱动设计)的思想来构建整个软件,所以我们在使用代码的时候明显能够感觉到其分层架构的思想,具体的分层结构我们可以通过文字并配合下面的这张图进行理解。
展现层:当前层提供了一个面向用户的接口,使用应用层来和用户进行交互,这里我们可以简单理解成MVC中的View以及其它可以和用户进行交互的可视化方式,这一层只用于进行展示。
应用层:应用层是展示层和领域层之间的桥梁,在这一层我们可以定义一些应用的服务,同时定义DTO等一些对象, 同时我们在当前层定义一些常用的验证、配置、Session等一些常见的和用户直接交互的一些逻辑等。
领域层:包括一些业务对象和他们之间的一些规则,这个是整个应用的核心部分。
框架层:提供一些的一些服务设施,从而为上面更高层次提供基础服务,比如ORM以及Data Filters等对象。
看完了这些我们再来通过一张图片对其有一个大概的了解。

对着这个框架图,再谈一谈本人对这个架构的思考与理解:
展示层:前端展示层,及MVC中的V层,以及其它可供与用户进行交互的方式。
应用层(XXX.Application):主要是通过对外提供REST风格的WebAPI接口(使用ABP框架生成动态WebApi方式时),定义数据传输对象DTO,从而直接面向展示层提供接口,在内部会会调用领域层中定义的接口方法进行对外和对内数据操作,另外还会处理一些Authorization, Caching, Audit Logging, Object Mapping, Session等方面的操作,所有的这些都是通过和用户进行交互来完成的。
领域层(XXX.Core):最重要的是实现对具体业务的抽象建模,构建Model层,另外通过注入IRepository接口实现对Model的各种操作,最终完成实际业务的对接,这个是整个应用系统的核心部分,具体的操作会定义在继承自IDomainService接口的XXXManager中,并且最后将当前唯一实例注入到Application层中。
架构层(XXX.EntityFrameworkCore):主要是提供一个和底层数据库进行交互的接口,通过领域层定义Model,然后使用CodeFirst生成数据库表结构,最后通过IRepository接口和领域层进行交互,另外还可以定义一些Data Filter等一些列的基础设施服务,通过这些能够实现为更高一层提供基础服务。
二 系统特色
1 容器技术
一个大的系统通过构筑一个唯一的容器,并通过将接口和实现注入容器来进行交互的方式是一种非常流行的技术,在ABP项目中底层采用 Castle Windsor 作为依赖注入容器,能够将接口注入到容器中,并且在不同的构造函数中通过注入接口来完成交互,这个在一定的程度上能够减少代码之间的耦合性,最终提高代码的可复用性,最终实现整个软件系统的高内聚低耦合,最终使整个代码更加规范,很多大型的项目都会使用依赖注入容器的方式来管理整个项目的核心交互逻辑,是一种非常重要的技术。
2 模块化设计思想
整个系统通过构筑一个个Module作为逻辑上的分割,而且还通过定义统一的抽象基类AbpModule来完成整个ABP框架对底层模块进行控制,另外通过插件化的思想构筑可扩展的软件热插拔系统,从而在最大程度上实现软件系统的规整、可扩展功能,最终使整个软件系统更加成熟。
3 全面而完整的基础功能模块
整个ABP框架集成了非常多而且成熟的技术,诸如:EntityFrameworkCore、IdentityServer、Log4Net、RedisCache等一系列的基础功能,而且整个框架提供了Asp.Net MVC以及Asp.Net Core 的基础接口,功能完善,能够在最大的程度上减少重复造轮子的弊端,这些优点都使得整个框架更有特色,而且整个项目开源,所以能够按照自己的需要对项目进行定制化开发与维护。
三 项目源码分析
这里特别进行说明,下面所有代码分析都是针对ABP3.7.2版本,阅读时需要注意版本区别
5 ABP中的拦截器之ValidationInterceptor(上)
ABP中的拦截器之ValidationInterceptor(下)
7 ABP中的拦截器之AuditingInterceptor
8 ABP中的拦截器之EntityHistoryInterceptor
9 ABP中的拦截器之UnitOfWorkInterceptor(一)
10 ABP中的拦截器之UnitOfWorkInterceptor(二)
11 ABP拦截器之AuthorizationInterceptor
ABP项目概述的更多相关文章
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- Castle Windsor常用介绍以及其在ABP项目的应用介绍
最近在研究ABP项目,有关ABP的介绍请看阳光铭睿 博客,ABP的DI和AOP框架用的是Castle Windsor下面就对Castle Windsor项目常用方法介绍和关于ABP的使用总结 1.下载 ...
- AutoMapper之ABP项目中的使用介绍
最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMapper只要用来数据转换,在园里已经有很多 ...
- ABP项目中的使用AutoMapper
AutoMapper之ABP项目中的使用 最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMa ...
- 在ABP项目的应用Castle Windsor
Castle Windsor常用介绍以及其在ABP项目的应用介绍 最近在研究ABP项目,有关ABP的介绍请看阳光铭睿 博客,ABP的DI和AOP框架用的是Castle Windsor下面就对Castl ...
- ABP项目启动及源代码结构
在整体介绍ABP项目之前我们需要从官方网站下载模板项目,下载以后放到一个本地目录下,启动VS打开源代码.具体下载的步骤如下: 一 创建ABP项目模板 1 进入官方网站然后选择特定的样板项目. 2 ...
- Abp项目构建、swagger及代码生成器
前段时间在学习abp,在配置swagger时踩了不少坑,特此整理一下,方便同行参考.幸运的是又发现了神奇的代码生成器,分享下亲身经验. 觉得此博客非常有用的朋友可以在右侧赞助打赏下,非常感谢大家支持. ...
- 在基于AngularJs架构的ABP项目中使用UEditor
[前提须知] 读过此篇博客 了解angular-ueditor 了解ABP如何使用 会使用VS2017 [1.下载ABP模板] https://aspnetboilerplate.com/Templa ...
- Mall电商项目总结(一)——项目概述
项目概述 此电商项目为本人学习项目,后端 使用nginx实现负载均衡转发请求到多台tomcat服务器,使用多台 redis服务器分布式 缓存用户登录信息. 项目已经部署到阿里云服务器,从阿里云linu ...
随机推荐
- C#添加PDF页眉——添加文本、图片到页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- Android开发过程中的坑及解决方法收录(六)
1. file.listFiles 空指针异常 最近在弄个小项目,类似一个文件管理器,需要获得手机存储里的目录之后显示,但是运行过程中出现错误,搜索了资料,得出了以下的解决办法 问题产生的原因: an ...
- 对HTML5标签的认识(二)
---恢复内容开始--- 这次随笔主要讲一下列表标签.链接标签.和表格标签.图像标签.音频标签.及视频标签的运用及作用. 一.<ul>和<ol> 首先先了解一下<ul&g ...
- jQuery 父iframe与子iframe 相互调用传值
来自:https://blog.csdn.net/wd4871/article/details/50517597 侵删 父页面中的iframe :如下 <iframe name="su ...
- Djang之cookie和session
一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器 ...
- asp.net core根据用户权限控制页面元素的显示
asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelp ...
- Maven的基础了解与使用
目录 Maven的介绍: 什么是Maven: 为什么要学习maven? 安装与配置: 下载: 配置环境变量 测试安装结果: Maven概念: 坐标 仓库 入门示例 创建maven工程: 添加依赖 Ma ...
- 爬虫之Requests&beautifulsoup
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...
- GIL:全局解释器锁 VS 用户程序锁
既然有了GIL锁,CPython还要多线程干什么? ''' GIL:全局解释器锁的来历 四核:同一时刻真正有四个任务在运行,多核的意义在于此 单核:看上去是并发的,因为进行了上下文切换,单核永远是串行 ...
- ASP.NET MVC5学习系列——身份验证、授权
一.什么是身份验证和授权 人们有时对用户身份验证和用户授权之间的区别感到疑惑.用户身份验证是指通过某种形式的登录机制(包括用户名/密码.OpenID.OAuth等说明身份的项)来核实用户的身份.授权验 ...