ABP源码分析四十:ZERO的Application和Tenant
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实例从缓存中删除。


ABP源码分析四十:ZERO的Application和Tenant的更多相关文章
- ABP源码分析四十二:ZERO的身份认证
ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展.同时重写了ABP核心模块中的permission功能,以实现 ...
- ABP源码分析四十四:ZERO的配置
ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig ...
- ABP源码分析四十五:ABP ZERO中的EntityFramework模块
AbpZeroDbContext:配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitiveProperty ...
- ABP源码分析四十六:ABP ZERO中的Ldap模块
通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- ABP源码分析二十四:Notification
NotificationDefinition: 用于封装Notification Definnition 的信息.注意和Notification 的区别,如果把Notification看成是具体的消息 ...
- ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
- ABP源码分析四:Configuration
核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...
- ABP源码分析二十六:核心框架中的一些其他功能
本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...
随机推荐
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- boosting、adaboost
1.boosting Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数.他是一种框架算法,主要是通过对样本集的操作获 ...
- 通往全栈工程师的捷径 —— react
腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...
- hadoop2.7之Mapper/reducer源码分析
一切从示例程序开始: 示例程序 Hadoop2.7 提供的示例程序WordCount.java package org.apache.hadoop.examples; import java.io.I ...
- 谈谈JS中的函数节流
好吧,一直在秋招中,都没怎么写博客了...今天赶紧来补一补才行...我发现,在面试中,讲到函数节流好像可以加分,尽管这并不是特别高深的技术,下面就聊聊吧! ^_^ 备注:以下内容部分来自<Jav ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- arcgis api for js入门开发系列八聚合效果(含源代码)
上一篇实现了demo的图层控制模块,本篇新增聚合效果,截图如下(源代码见文章底部): 聚合效果实现的思路如下: 1.map.html引用聚合包,项目已经包含进来了的聚合文件夹: <script ...
- HttpPost过程中使用的URLEncoder.encode(something, encode)
URLEncoder.encode("刘美美", "utf-8").toString() = %E5%88%98%E7%BE%8E%E7%B ...
- closure
什么是闭包?百度的答案: 闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)."闭包&quo ...
- 如何在Open Live Writer(OLW)中使用precode代码高亮Syntax Highlighter
早先Microsotf的Windows Live Writer(WLW)现在已经开源了,并且更名为Open Live Writer,但是现在Windows Live Writer还是可以现在,Open ...