ABP理论学习之通知系统】的更多相关文章

返回总目录 本篇目录 介绍 订阅通知 发布通知 用户通知管理者 实时通知 通知存储 通知定义 介绍 通知(Notification)用于告知用户系统中的特定事件.ABP提供了基于实时通知基础设施的发布订阅模型(pub/sub). 发送模型 给用户发送通知有两种方式: 首先用户订阅特定的通知类型,然后我们发布这种类型的通知,这种类型的通知会传递给所有已经订阅的用户.这就是发布订阅(pub/sub)模型. 直接给目标用户发送通知. 通知类型 通知类型也有两种: 一般通知:是任意类型的通知."如果一个…
文档目录 本节内容: 简介 发送模式 通知类型 通知数据 通知重要性 关于通知持久化 订阅通知 发布通知 用户通知管理器 实时通知 客户端 通知存储 通知定义 简介 通知用来告知用户系统里特定的事件发生了,ABP提供一个发布/订阅,它基于实时通知基础框架. 发送模式 有两种方式可以发送通知给用户: 用户订阅一个特定的通知类型,然后我们发布一个此类型的通知,它会分发给所有订阅的用户,这就是发布/订阅模式. 我们可以直接发送一个通知给目标用户(users). 通知类型 有两种通知类型: 一般通知:任…
简介 在ABP中,提供了通知服务.它是一个基于实时通知的基础设施.分为订阅模式和发布模式. 本次会在项目中使用发布模式来演示一个用户注册后,收到的欢迎信息. 发布模式 首先我们在领域层建立"INotificationManager"接口和"NotificationManager"实现类,如下: /// <summary> /// 通知管理领域服务 /// </summary> public interface INotificationMan…
返回总目录 本篇目录 模块介绍 生命周期事件 模块依赖 自定义模块方法 模块介绍 ABP提供了构建模块并将这些模块组合起来创建应用的基础设施.一个模块可以依赖另一个模块.一般来说,一个程序集可以认为是一个模块.一个模块是由一个派生了AbpModule的类定义的.比如说我们在开发一个可以用在不同的应用中的博客模块.最简单的模块定义如下: public class MyBlogApplicationModule : AbpModule { public override void Initializ…
通知系统 介绍 发送模型 通知类型 通知数据 通知严重性 关于通知持久化 订阅通知 发布通知 用户通知管理 实时通知 客户端 通知存储 通知定义 介绍 在系统中通知用来基于特定的事件告知用户.ABP提供了pub/sub基础实时通知基础设施. 发送模型 有两种给用户发送通知的方式: 用户订阅一个特定的通知类型.然后我们发布此类型的一个通知,此类型会被发送给所有订阅的用户.这就是pub/sub模型. 我们可以直接给目标用户发送一个通知. 通知类型 通知有两种类型: 普通通知可以是任意类型.“如果一个…
返回总目录 本篇目录 事件总线 定义事件 触发事件 处理事件 句柄注册 取消注册 在C#中,我们可以在一个类中定义自己的事件,而其他的类可以注册该事件,当某些事情发生时,可以通知到该类.这对于桌面应用或者独立的windows服务来说是非常有用的.但对于一个web应用来说是有点问题的,因为对象都是在web请求中创建的,而且这些对象生命周期都很短,因而注册某些类的事件是很困难的.此外,注册其他类的事件会使得类紧耦合. 领域事件用于解耦并重复利用应用中的逻辑. 事件总线 事件总线是被所有触发并处理事件…
返回总目录 本篇目录 Ajax Notification Message UI block和busy 事件总线 Logging 其他工具功能 说在前面的话 不知不觉,我们送走了2015,同时迎来了2016.我相信,每一个人,都会在过去的一年有所失,但我更相信,我们所得到的更多.过去的就过去了,不要再计较了,但要从过去的各种不顺中汲取经验,这样,在全新的2016年里继续留下2015年遗憾的概率才会大大降低!祝大家在新的一年里,代码bug越来越少! 本来给这个ABP理论学习系列的预算时间是2016年…
返回总目录 本篇目录 介绍 安装 建立连接 内置功能 你自己的SignaR代码 介绍 Abp.Web.SignalR 使得在基于ABP的应用程序中使用 SignalR相当容易.查看SignalR文档获取更多关于SignalR的详细信息. 安装 服务端 将Abp.Web.SignalRnuget包安装到你的项目中(一般是web层),然后给你的模块添加一个依赖: [DependsOn(typeof(AbpWebSignalRModule))] public class YourProjectWebM…
返回总目录 查看更详细信息以及下载源代码请查看原文档 ABP v0.9.2.0 | [更新日期:2016/6/6 11:21:28 ] 解决方案转换成xproj/project.json格式. 添加了Appveyor持续集成. 创建了EntityCache基类,可以轻松缓存实体了. 添加了可以用于对象与对象之间映射的可注入的IObjectMapper接口(在Abp.AutoMapper模块中实现). 修复获取实体和设置DateTime.Kind时的bug,提升了性能. 改善使用多个DbConte…
返回总目录 本篇目录 介绍 预定义过滤器 关闭过滤器 开启过滤器 设置过滤器参数 定义自定义过滤器 其他ORM 介绍 软删除模式通常用于不会真正从数据库删除一个实体而是仅仅将它标记为"已删除的".这样,如果一个实体是软删除的,那么它不应该在应用中检索到.为了实现这个目的,我们应该在每一个select实体查询操作中添加一个SQL where条件,如"IsDeleted=false".这是乏味但是很重要的一项容易忘记的任务.因此,这项工作应该自动完成. ABP提供了数据…
返回总目录 本篇目录 介绍 功能类型 定义功能 检查功能 功能管理者 版本说明 介绍 大多数的Saas(多租户)应用都有不同 功能的 版本(包).因此,他们可以给租户(客户)提供不同的 价格和功能选项. ABP提供了功能系统使得这个更简单.我们可以 定义功能,然后检查某个功能是否对一个租户 开启了,最后将功能系统 集成到其他的ABP概念中(如权限和菜单). 关于IFeatureValueStore 功能系统使用了IFeatureValueStore来获得功能的值.虽然你可以用自己的方式实现该接口…
1. 简单传参 wx.navigateTo({ url: '/pages/demo/index/index?id=1' }) /pages/demo/index/index.js 中 onLoad(options){ var id = options.id; //获取通过url参数传递来的参数 }   2. 复杂传参 var json = JSON.stringify({a:1}); wx.navigateTo({ url: '/pages/demo/index/index?json='+ js…
动机 简介 个人评分 动机 你曾经是否想为你自己的网站构建Facebook,Github那种feed流. 简介 通过Stream-Framework1你可以做到: Github那种活动流 Twitter形式的newsfeed Instagram/Pinterest形式的feed Facebook形式的feed 通知系统 个人评分 类型 评分 实用性 ⭐️⭐️⭐️ 易用性 ⭐️ 有趣性 ⭐️⭐️ Github Repo ↩…
观察者模式,绝对是游戏中十分重要的一种模式,运用这种模式,可以让游戏模块间的通信变得简单,耦合度也会大大降低,下面讲解如何利用C#实现事件通知系统. 补充,首先说下这个系统的实现原理,不然一头扎进去就难受了,这个系统的关键就在于两个类,EventCenter 和Handler,她们关系如下: 首先定义两个接口,IEventCenter 和IEventHandlerManager,代码如下: public interface IEventCenter : IDestroy { bool AddEv…
返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析,这些找不到demo的同学,很可能是不怎么用github,可能的原因就是英文不好.所以还是希望程序员多看看英文文档,一开始看得很慢不要紧,时间久了,速度绝对能上去.因为都是技术性的文章,没有特别难的语法,能让大家退而却步的最多是些生词,这个就要靠大家积累常见的词汇了,一些生僻词的话查一下意思,理解了那句话就可以过了. 跟ABP相关…
返回总目录 本篇目录 什么是依赖注入 传统方式产生的问题 解决办法 依赖注入框架 ABP中的依赖注入基础设施 注册 解析 其他 ASP.NET MVC和ASP.NET Web API集成 最后提示 什么是依赖注入 维基百科说:"依赖注入是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分.该模式分离了客户端依赖本身行为的创建,这使得程序设计变得松耦合,并遵循了依赖反转和单一职责原则.与服务定位器模式形…
返回总目录 本篇目录 配置ABP 配置模块 为模块创建配置 为了在应用启动时配置ABP和模块,ABP提供了一个基础设施. 配置ABP 配置ABP是在模块的PreInitialize事件中完成的.下面的代码摘自Github上的Taskever(一个任务系统Demo): public class SimpleTaskSystemModule : AbpModule { public override void PreInitialize() { //为应用添加语言 Configuration.Loc…
返回总目录 本篇目录 什么是多租户 ABP中的多租户 什么是多租户 维基百科:"软件多租户是指一种软件架构,在这种软件架构中,软件的一个实例运行在服务器上并且为多个租户服务".一个租户是一组共享该软件实例特定权限的用户.有了多租户架构,软件应用被设计成为每个租户提供一个 专用的实例包括该实例的数据的共享,还可以共享配置,用户管理,租户自己的功能和非功能属性.多租户和多实例架构相比,多租户分离了代表不同的租户操作的多个实例. 多租户用于创建Saas(Software as-a servi…
返回总目录 本篇目录 介绍 注入Session 使用Session属性 介绍 当应用程序要求用户登录时,那么应用程序也需要知道当前用户正在执行的操作.虽然ASP.NET本身在展现层提供了Session对象,但ABP也提供了在任何需要获得当前用户和租户的地方都可以使用的IAbpSession接口. 关于IAbpSession 为了获得实际的session信息,必须要实现IAbpSession接口.虽然你可以用自己的方式实现它,但在module-zero项目中已经完全实现. IAbpSession已…
返回总目录 本篇目录 服务端 获取Logger 基类中的Logger 配置 客户端 服务端 ABP使用的是Castle Windsor的日志记录设备.它可以和不同的日志类库一起工作,比如Log4Net,NLog,Serilog等等.Castle为所有的日志类库提供了一个公共的接口.因此,你完全独立于特定的日志记录类库,而且,如果需要的话,你可以轻松地改变应用程序的日志类库. Log4Net是.Net中最流行的日志类库之一.ABP模板中自带了经过合适配置的Log4Net.但是,只存在一行log4n…
返回总目录 本篇目录 介绍 定义设置 获取设置值 更改设置 关于缓存 介绍 每个应用程序都需要存储一些设置信息,然后在应用程序中的某个地方使用这些设置.ABP提供了健壮的基础设施来存储或检索服务端和客户端的应用程序,租户,用户级别的可用设置. 一个设置一般是存储在数据库(或其他源)的name-value字符串对.我们可以将非字符串的值转换成字符串. 关于ISettingStore 为了使用设置系统,必须要实现ISettingStore.虽然你可以用自己的方式实现,但是它已完全实现在module-…
返回总目录 本篇目录 介绍 IDomainService接口和DomainService类 样例 创建一个接口 服务实现 调用应用服务 一些讨论 何不只使用应用服务 如何强制使用领域服务 介绍 领域服务(或DDD中的服务)用于执行领域操作和业务规则.Eric Evans描述了一个好的服务应该具备下面三个特征: 和领域概念相关的操作不是一个实体或者值对象的本质部分. 接口定义在领域模型其他元素的条款中. 操作是无状态的. 跟获得或返回一个数据传输对象的应用服务方法(DTO)不同,领域服务获得或者返…
返回总目录 本篇目录 公共连接和事务管理方法 ABP中的连接和事务管理 仓储类 应用服务 工作单元 工作单元详解 关闭工作单元 非事务的工作单元 工作单元方法调用其它 工作单元作用域 自动保存 IRepository.GetAll()方法 UnitOfWork特性的限制 选项 方法 事件 公共连接和事务管理方法 在使用了数据库的应用中,连接和事务管理是最重要的概念之一.何时打开一个连接,何时开始一个事务,如何释放连接等等. 你可能已经知道,Net使用了连接池.因此,创建一个连接实际上是从连接池中…
返回总目录 本篇目录 IApplicationService接口 ApplicationService类 工作单元 数据库连接和事务管理 自动保存更改 更多 应用服务的生命周期 应用服务用于将领域逻辑暴露给展现层.展现层调用具有DTO参数的应用服务,使用领域对象来执行一些特定的业务逻辑并返回给展现层一个DTO.这样,展现层就完全独立于领域层了.在一个理想的分层应用中,展现层永远不直接和领域对象打交道. IApplicationService接口 在ABP中,应用服务应该实现 IApplicati…
返回总目录 本篇目录 介绍 定义权限 检查权限 使用AbpAuthorize特性 使用IPermissionChecker Razor视图 客户端(Javascript) 权限管理者 介绍 几乎所有的企业应用都在不同程度使用了授权.授权的目的在于检查是否允许用户在应用程序中执行特定的操作.ABP定义了一个基于权限的基础设施来实现授权. 关于IPermissionChecker 授权系统使用了IPermissionChecker来检查权限.虽然你可以用自己的方式实现该接口,但是它已完全实现在了 m…
返回总目录 本篇目录 介绍 配置 通过特性开启/关闭 注意 我项目中的例子 介绍 维基百科说: "审计跟踪(也叫审计日志)是与安全相关的按照时间顺序的记录,记录集或者记录源,它们提供了活动序列的文档证据,这些活动序列可以在任何时间影响一个特定的操作,步骤或其他". ABP提供了一个基础设施,它可以自动记录所有和应用程序交互的日志.它可以记录具有调用者信息和参数的方法调用. 一般地,要保存的字段是:相关的租户Id,调用者的用户Id,调用的 服务名称(调用方法的类名),调用的方法名 , 执…
返回总目录 本篇目录 介绍 安装 创建控制器 例子 样例项目 介绍 OData在其官网的定义是: 允许以一种 简单且标准的方式创建和使用可查询的.可互操作的RESTful APIs. 在ABP中也可以使用OData.Abp.Web.Api.OData nuget包简化了它的使用. 安装 安装Nuget包 我们应该首先将Abp.Web.Api.OData nuget包安装到WebApi项目中: Install-Package Abp.Web.Api.OData 设置模块依赖 给我们的WebApi项…
返回总目录 本篇目录 应用语言 本地化资源 获取本地化文本 扩展本地化资源 最佳实践 应用语言 一个应用至少有一种UI语言,许多应用不止有一种语言.ABP为应用提供了一个灵活的本地化系统. 第一件事情就是声明支持哪些语言.这个是在模块的PreInitialize方法中完成的,如下所示: Configuration.Localization.Languages.Add(new LanguageInfo("en", "English", "famfamfam-…
返回总目录 本篇目录 创建菜单 注册导航提供者 展示菜单 每一个web应用在页面之间都有一些要导航的菜单.ABP提供了公用的基础设施来创建菜单并将菜单展示给用户. 创建菜单 一个应用可能由不同的模块组成,每个模块可能有它自己的菜单项.想要定义菜单项,我们需要创建一个派生自NavigationProvider的类. 假设我们有一个如下所示的主菜单: Tasks Reports Administration User Management Role Management 这里,Administrat…
返回总目录 本篇目录 介绍 开启错误处理 非Ajax请求 展示异常信息 UserFriendlyException Error模型 Ajax请求 异常事件 介绍 在一个web应用中,异常通常是在MVC控制器的action方法和Web API控制器中处理的.当异常发生时,应用程序会通知用户发生的错误,也可能包含该错误产生的原因. 如果错误发生在一个常规的HTTP请求中,那么就会展示一个错误页面.如果一个错误发生在Ajax请求中,那么服务端会给客户端发送错误信息,然后处理后将错误展示给用户. 在所有…