ABP之框架体系
一 .框架体系的介绍
ABP框架采用的是DDD(领域驱动设计)的原则,可以很方便实现项目之间的松耦合,采用模块化的方式,方便对框架的扩展。
按照DDD的原则,首先将项目分为四层:
展现层:用来展现给用户,并和用户进行交互的层。
应用层(Application):用来和领域层进行交互。
领域层(Domain):这个是核心层,完成基本逻辑和数据的处理。
基础设施层(infrastructure):这个是封装了对数据库的处理,如ORM框架
具体的框架体系分布:
二 . ABP项目文件的介绍
三. ABP中Module的生命周期
在ABP框架中采用的模块的方式进行加载,那么它的执行顺序是怎样的呢?
上面的代码是从Core层拿过来的,其中可以注意到,任何自定义的Module都必须继承AbpModule,同时发现有几个特殊的方法。
(1)PreInitialize:预初始化,当应用第一次启动的时候,会首先调用这个方法,这个方法是在依赖注入之前,可以在这个方法中自定义启动类。上述代码中可以看到进行了一些配置。
(2)Initialize:初始化,大多是将一些类库注入到容器中去,注入的方式IocMananger.RegisterAssemblyByConvetion().
(3)PostInitialize:提交初始化的内容,用来解析依赖关系。
(4)Shutdown:这个方法不常用,就是在关闭应用的时候被调用。
那么问题来了,在ABP框架中存在好多的Module,那么具体是怎样进行初始化的呢?(两种可能的方式:1.ModuleA的PreInitialize,然后ModuleaA的Initiallize。。。当ModuleA初始化完后在执行ModuleB 2.执行ModuleA的PreInitialize ,执行ModuleB的PreInitialize,然后执行ModuleA的Initialize和ModuleB的Initialize)
在ABP框架中会自动解析依赖关系,但是还是建议明确的指明依赖关系,上面就是使用特性标签的方式标注依赖关系。
从上面的代码可以看出ModuleA依赖于ModuleB,那么他们的执行顺序是:
PreInitialize-ModuleB
PreInitialize-ModuleA
Initialize-ModuleB
Initialize-ModuleA
PostInitialize-ModuleB
PostInitialize-ModuleA
(看样子第二种猜测是正确的)
关于自定义Module,只需要继承自AbpModule,然后分别实现对应的PreInitialize和Initialize,完成自己的需求配置即可。
ABP之框架体系的更多相关文章
- ABP VNext框架基础知识介绍(1)--框架基础类继承关系
在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...
- NBIbatis 框架体系说明
框架体系说明 Application 表现层 表现层必须通过Business业务规则层操作数据库,不能直接调用DataAccess数据访问. Sqlmap.config配置: connectionSt ...
- HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID
HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...
- 手工搭建基于ABP的框架 - 工作单元以及事务管理
一个业务功能往往不只由一次数据库请求(或者服务调用)实现.为了功能的完整性,我们希望如果该功能执行一半时出错,则撤销前面已执行的改动.在数据库层面上,事务管理实现了这种完整性需求.在ABP中,一个完整 ...
- Java集合框架体系JCF
Java 集合框架体系作为Java 中十分重要的一环, 在我们的日常开发中扮演者十分重要的角色, 那么什么是Java集合框架体系呢? 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一 ...
- Abp vNext框架 实例程序BookStore-笔记
参考 Abp vNext框架 应用程序开发教程 创建项目和书籍列表页面 http://www.vnfan.com/helinbin/d/3579c6e90e1d23ab.html 官方源码 https ...
- Abp vNext框架 从空项目开始 使用ASP.NET Core Web Application-笔记
参考 Abp vNext框架 从空项目开始 使用ASP.NET Core Web Application http://www.vnfan.com/helinbin/d/745b1e040c9b4f6 ...
- java集合类-集合框架体系
集合框架体系 集合框架体系是由Collection.Map和 Iterator(迭代器) 实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 Collection体系 Set接口:元素无序且不 ...
- Java 集合框架体系总览
尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 「CS-Wiki」Gitee ...
随机推荐
- python -m 命令单独运行一个文件,怎么解决单独运行文件报错?
依旧是续上篇解决为什么项目能运行,单独文件不能运行. 依旧是python3先发下目录结构,依旧是cmd运行,不要弄pycharm开始运行,否则有些错误就发现不了! 项目下面有pac1文件夹,pac1下 ...
- Java -- Java 类集 -- 目录
13.1 认识类集 13.1.1 基本概念 13.1.2 类集框架主要接口 13.2 Collection接口 13.2.1 Collection接口的定义 13.2.2 Collection子接口的 ...
- Bypass X-WAF SQL注入防御(多姿势)
0x00 前言 X-WAF是一款适用中.小企业的云WAF系统,让中.小企业也可以非常方便地拥有自己的免费云WAF. 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass. ...
- Android开发-- 简单对话框
final Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.appicns_folder_sma ...
- Django SimpleCMDB 使用序列化
如下,前面我们是使用 urllib 方法来转换并传递数据的: [root@localhost ~]$ tail /data/script/getHostInfo.py if __name__ == ' ...
- MongoDB 备份恢复
备份: mongodump --host -u admin -p -o /tmp/alldb/ // 备份所有的库 mongodump --host -u admin -p -d mydb -o /t ...
- shell中判断是否是月末的方法
判断今天是不是一月的最后一天: 如果$(TZ=IST-32 date +%d)是1就是月末了.
- ScaleType属性
FIT_CENTER 把原图按照比例放大缩小到ImageView的高度,显示在ImageView的center(中部/居中显示). 1 2 CENTER_CROP 会拉伸图片以原图填满ImageV ...
- setTag,getTage复用
radioButtons = new RadioButton[rgMain.getChildCount()]; //遍历RadioGroupfor (int i = 0; i < radioBu ...
- GCC 编译详解[转]
转自http://www.cnblogs.com/azraelly/archive/2012/07/07/2580839.html GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译 ...