zoukankan      html  css  js  c++  java
  • 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,完成自己的需求配置即可。

  • 相关阅读:
    Alfred上可提高工作效率的Workflow推荐
    局部性原理——各类优化的基石
    持续学习——程序猿的军备竞赛
    http://regex.alf.nu/ 非标准答案
    13总结
    Ubuntu下python安装mysqldb(驱动)
    北大ACM试题分类+部分解题报告链接
    poj 3253 Fence Repair(优先队列+huffman树)
    Centos/Fedora下安装Twisted,failed with error code 1 in /tmp/pip-build-H1bj8E/twisted/解决方法
    关于command 'gcc' failed with exit status 1 解决方法
  • 原文地址:https://www.cnblogs.com/XZhao/p/8167775.html
Copyright © 2011-2022 走看看