博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ABP源码分析四十:ZERO的Application和Tenant
阅读量:5892 次
发布时间:2019-06-19

本文共 2114 字,大约阅读时间需要 7 分钟。

ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, session, authorization (permission management), setting management, language management, audit logging等核心功能。ABP中的这些功能具体实现都依赖外部的持久层,所以ABP框架中仅仅定义了接口和一些空的实现。而对这些功能真正的实现则交给Zero这类模块。

Zero模块主要的代码也很简单,就是针对这些功能模块的领域逻辑的实现,所以无非就是定义实体,实体关系,以及相关的CRUD操作。

 

Edition:继承自FullAuditedEntity实体类。表示一个application的版本。下图表示其去另外两个Entity的关系。

EditionFeatureSetting:继承自FeatureSetting。表示一个与具体Edition关联的Feature

FeatureSetting:继承自CreationAuditedEntity<long>的实体类。  封装了FeatureSetting的name和value

 

AbpTenant:继承自FullAuditedEntity实体类。表示Tenant.

 

AbpEditionManager:处理与Edition相关的邻域逻辑。其引用了两个对象:EditionRepository 和EditionFeatureRepository(IRepository<Edition>和 IRepository<EditionFeatureSetting, long> 的实例,图中用红色标注)。AbpEditionManager通过EditionRepository 实例完成Edition的CRUD操作,通过EditionFeatureRepository完成EditionFeatureSetting 实例的CRUD操作。

这里要注意AbpEditionManager实例了两个事件处理器的接口,用于响应Edition以及EditionFeatureSetting发生改变时触发的事件。这边的具体事件处理函数完成将Edition以及EditionFeatureSetting实例从缓存中删除。

 

EditionfeatureCacheItem:这个类实例被用于缓存,其字典集合FeatureValues用于保存与某个edition对应的FeatureSetting。

 

AbpFeatureValueStore:这是一个抽象基类。其提供了一个方法GetValueOrNullAsync根据tenant的指定feature的值。该方法内部是通过调用AbpTenantManager的实例来完成的。如果feature和edition相关,还需要调用AbpEditionManager的相应方法来获取feature的value.

 

TenantFeatureSetting:继承自FeatureSetting。表示一个与具体Tenant关联的Feature

TenantFeatureCacheItem:与EditionfeatureCacheItem相似。这个类实例被用于缓存,其字典集合FeatureValues用于保存与某个Tenant对应的FeatureSetting。

 

TenantFeatureCacheItemInvalidator:实现了IEventHandler接口中的HandleEvent方法,以相应TenantFeatureSetting实体对象发生变化时,将其从缓存中删除。

 

IMustHaveTenant:该接口标识其Entity与tenant有关联关系,但是这关联关系是必须的。

IMayHaveTenant :该接口标识其Entity与tenant有关联关系,但是这关联关系不是必须的。

 

AbpTenantManager:处理与Tenant相关的邻域逻辑。其引用了两个对象:TenantRepository 和TenantFeatureRepository(IRepository<Tenant>和 IRepository<TenantFeatureSetting, long> 的实例,图中用红色标注)。AbpEditionManager通过TenantRepository 实例完成Tenant的CRUD操作,通过TenantFeatureRepository完成TenantFeatureSetting 实例的CRUD操作。

这里要注意AbpTenantManager实例了两个事件处理器的接口,用于响应Tenant以及Edition发生改变时触发的事件。这边的具体事件处理函数完成将Tenant以及EditionFeatureSetting实例从缓存中删除。

 

返回

转载于:https://www.cnblogs.com/1zhk/p/5450846.html

你可能感兴趣的文章
DEFERRED_SEGMENT_CREATION
查看>>
Ada boost学习
查看>>
开源 java CMS - FreeCMS2.3字典管理
查看>>
block,inline和inline-block概念和区别
查看>>
移动端常见随屏幕滑动顶部固定导航栏背景色透明度变化简单jquery特效
查看>>
javascript继承方式详解
查看>>
白话讲反射技术 --- 适合初学者入门引导
查看>>
css变形 transform
查看>>
win7家庭版添加组策略编辑器
查看>>
lnmp环境搭建
查看>>
自定义session扫描器精确控制session销毁时间--学习笔记
查看>>
【转】EDK简单使用流程(3)
查看>>
Ubuntu中无法update的解决办法
查看>>
仿射变换
查看>>
decltype类型指示符
查看>>
虹软ArcFace人脸识别 与 Dlib 人脸识别对比
查看>>
laravel 验证码使用示例
查看>>
IE开发人员工具无法使用
查看>>
分页器(自定制)
查看>>
HDU1877 又一版 A+B
查看>>