在系统性介绍整个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版本,阅读时需要注意版本区别

ABP项目启动及源代码结构

2 ABP中的依赖注入思想

    ABP中模块初始化过程(一)

4 ABP中模块初始化过程(二)

ABP中的拦截器之ValidationInterceptor(上)

   ABP中的拦截器之ValidationInterceptor(下)

ABP中的拦截器之AuditingInterceptor

  8 ABP中的拦截器之EntityHistoryInterceptor

ABP中的拦截器之UnitOfWorkInterceptor(一)

  10 ABP中的拦截器之UnitOfWorkInterceptor(二)

11 ABP拦截器之AuthorizationInterceptor

12  ABP中的Filter(上)

 13 ABP中的Filter( 下 )

14  在Asp.Net Core中集成ABP Dapper

ABP项目概述的更多相关文章

  1. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  2. Castle Windsor常用介绍以及其在ABP项目的应用介绍

    最近在研究ABP项目,有关ABP的介绍请看阳光铭睿 博客,ABP的DI和AOP框架用的是Castle Windsor下面就对Castle Windsor项目常用方法介绍和关于ABP的使用总结 1.下载 ...

  3. AutoMapper之ABP项目中的使用介绍

    最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMapper只要用来数据转换,在园里已经有很多 ...

  4. ABP项目中的使用AutoMapper

    AutoMapper之ABP项目中的使用 最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMa ...

  5. 在ABP项目的应用Castle Windsor

    Castle Windsor常用介绍以及其在ABP项目的应用介绍 最近在研究ABP项目,有关ABP的介绍请看阳光铭睿 博客,ABP的DI和AOP框架用的是Castle Windsor下面就对Castl ...

  6. ABP项目启动及源代码结构

    在整体介绍ABP项目之前我们需要从官方网站下载模板项目,下载以后放到一个本地目录下,启动VS打开源代码.具体下载的步骤如下: 一   创建ABP项目模板 1 进入官方网站然后选择特定的样板项目. 2 ...

  7. Abp项目构建、swagger及代码生成器

    前段时间在学习abp,在配置swagger时踩了不少坑,特此整理一下,方便同行参考.幸运的是又发现了神奇的代码生成器,分享下亲身经验. 觉得此博客非常有用的朋友可以在右侧赞助打赏下,非常感谢大家支持. ...

  8. 在基于AngularJs架构的ABP项目中使用UEditor

    [前提须知] 读过此篇博客 了解angular-ueditor 了解ABP如何使用 会使用VS2017 [1.下载ABP模板] https://aspnetboilerplate.com/Templa ...

  9. Mall电商项目总结(一)——项目概述

    项目概述 此电商项目为本人学习项目,后端 使用nginx实现负载均衡转发请求到多台tomcat服务器,使用多台 redis服务器分布式 缓存用户登录信息. 项目已经部署到阿里云服务器,从阿里云linu ...

随机推荐

  1. Java开发笔记(十)一元运算符的技巧

    前面讲到赋值运算符的时候,提到“x = x+7”可以被“x += 7”所取代,当然Java编程中给某个变量自加7并不常见,常见的是给某变量自加1,就像走台阶,一般都是一级一级台阶地走,犯不着一下子跳上 ...

  2. Android安全–Dex文件格式详解

    Dex文件是手机上类似Windows上的EXE文件,dex文件是可以直接在Dalvik虚拟机中加载运行的文件. 首先我们来生成一个Dex文件. 新建文件Hello.java内容如下: class He ...

  3. Maven(十四)Maven 继承

    以Junit为例 由于junit的依赖的范围为test,所以在每一个项目中都必须配置一个junit. 为了统一管理方便,可以单独创建一个项目用来进行**统一管理**junit的版本 即在子项目中不设置 ...

  4. 零基础学Python--------第5章 字符串及正则表达式

    第5章 字符串及正则表达式 5.1 字符串常用操作 在Python开发过程中,为了实现某项功能,经常需要对某些字符串进行特殊处理,如拼接字符串.截取字符串.格式化字符串等.下面将对Python中常用的 ...

  5. react 函数子组件(Function ad Child Component)

    今天学习了react中的函数子组件的概念,然后在工作中得到了实际应用,很开心,那么好记性不如烂笔头,开始喽~ 函数子组件(FaCC )与高阶组件做的事情很相似, 都是对原来的组件进行了加强,类似装饰者 ...

  6. TS学习随笔(三)->接口

    终于来到了比较重要的知识,接口,有多重要呢,反正是很重要好啵 在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型. 那什么是接口呢,在面向对象语言中,接口(Interf ...

  7. Android application使用总结

    简介: Application和Activity.Service一样,都是Android框架的一个系统组件,每一个应用都有一个Application,Application的生命周期也就是整个app的 ...

  8. macos 安装sublime text 3,如何安装插件

    1. 上面的代码如下: import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1 ...

  9. MongoDB 如何实现备份压缩

    背景及原理 数据库的备份是灾难恢复的最后一道屏障,不管什么类型的数据库都需要设置数据库备份,MongoDB也不例外.MongoDB 3.0 后 ,数据库可以采用Wiredtiger存储引擎后(3.2 ...

  10. sql server 错误日志errorlog

    一 .概述 SQL Server 将某些系统事件和用户定义事件记录到 SQL Server 错误日志和 Microsoft Windows 应用程序日志中. 这两种日志都会自动给所有记录事件加上时间戳 ...