NopCommerce商城系统中的eventbus
2016-03-16 21:21
295 查看
nopcommerce中事件发布与订阅是相对比较规范的,
1、IConsumer 消费者
public interface IConsumer<T>
{
void HandleEvent(T eventMessage);
}
2、IEventPublisher 事件发布者
事件调用者,程序入口,
/// <summary>
/// Evnt publisher
/// </summary>
public interface IEventPublisher
{
/// <summary>
/// Publish event
/// </summary>
/// <typeparam name="T">Type</typeparam>
/// <param name="eventMessage">Event message</param>
void Publish<T>(T eventMessage);
}
3、ISubscriptionService 事件订阅服务
/// <summary>
/// Event subscription service
/// </summary>
public interface ISubscriptionService
{
/// <summary>
/// Get subscriptions
/// </summary>
/// <typeparam name="T">Type</typeparam>
/// <returns>Event consumers</returns>
IList<IConsumer<T>> GetSubscriptions<T>();
}
获取事件所有消费者
案例:
有这样一个需求,用户登录模块,用户登录之后我需要将登陆日志保存到数据库,同时我需要将用户所具有权限放到缓存
//传统做法
public class UserService :IUserService
{
public Log(User model)
{
//验证用户,验证成功
[b] //调用日志服务,将登陆信息记录到数据库[/b]
[b] //调用缓存服务,将用户权限放到缓存里[/b]
}
}
注意绿色部门都是用户登录之后操作的事情,我们会不会考虑将这两个操作当作一个事件,也就是表示这两个相当于用户登录关联的消费者,使用事件发布的方式来处理。
演变之后:
定义用户登录事件:
//用户消费者
public class CustomerEventConsumer : IConsumer<CustomerLoggedinEvent>,IConsumer<CustomerRegisteredEvent>
{
/// <summary>
/// 处理用户登录事件
/// </summary>
/// <param name="eventMessage"></param>
public void HandleEvent(CustomerLoggedinEvent eventMessage)
{
//记录日志
Console.Write("登陆成功");
//记录登陆日志
}
public void HandleEvent(CustomerRegisteredEvent eventMessage)
{
//记录日志
Console.Write("注册成功");
//更新数据
}
}
修改之后如下:
public class UserService :IUserService
{
public Log(User model)
{
//验证用户,验证成功
调用事件发布
_eventPublisher.Publish(new CustomerLoggedinEvent(customer));
}
}
简单写了一下
1、IConsumer 消费者
public interface IConsumer<T>
{
void HandleEvent(T eventMessage);
}
2、IEventPublisher 事件发布者
事件调用者,程序入口,
/// <summary>
/// Evnt publisher
/// </summary>
public interface IEventPublisher
{
/// <summary>
/// Publish event
/// </summary>
/// <typeparam name="T">Type</typeparam>
/// <param name="eventMessage">Event message</param>
void Publish<T>(T eventMessage);
}
3、ISubscriptionService 事件订阅服务
/// <summary>
/// Event subscription service
/// </summary>
public interface ISubscriptionService
{
/// <summary>
/// Get subscriptions
/// </summary>
/// <typeparam name="T">Type</typeparam>
/// <returns>Event consumers</returns>
IList<IConsumer<T>> GetSubscriptions<T>();
}
获取事件所有消费者
案例:
有这样一个需求,用户登录模块,用户登录之后我需要将登陆日志保存到数据库,同时我需要将用户所具有权限放到缓存
//传统做法
public class UserService :IUserService
{
public Log(User model)
{
//验证用户,验证成功
[b] //调用日志服务,将登陆信息记录到数据库[/b]
[b] //调用缓存服务,将用户权限放到缓存里[/b]
}
}
注意绿色部门都是用户登录之后操作的事情,我们会不会考虑将这两个操作当作一个事件,也就是表示这两个相当于用户登录关联的消费者,使用事件发布的方式来处理。
演变之后:
定义用户登录事件:
//用户消费者
public class CustomerEventConsumer : IConsumer<CustomerLoggedinEvent>,IConsumer<CustomerRegisteredEvent>
{
/// <summary>
/// 处理用户登录事件
/// </summary>
/// <param name="eventMessage"></param>
public void HandleEvent(CustomerLoggedinEvent eventMessage)
{
//记录日志
Console.Write("登陆成功");
//记录登陆日志
}
public void HandleEvent(CustomerRegisteredEvent eventMessage)
{
//记录日志
Console.Write("注册成功");
//更新数据
}
}
修改之后如下:
public class UserService :IUserService
{
public Log(User model)
{
//验证用户,验证成功
调用事件发布
_eventPublisher.Publish(new CustomerLoggedinEvent(customer));
}
}
简单写了一下
相关文章推荐
- VS2013运行OpenGL例子提示找不到<GL/glew.h>,GL/freeglut_ext.h,GL/freeglut.h,glew32.lib,freeglut.lib等
- Hadoop MapReduce模块 Module 4: MapReduce
- 《Linux内核设计与实现》——第1、2章(内核简介)
- linux中awk命令详解
- 《linux内核设计与实现》读书笔记第一、二章
- Hadoop官网的一个WordCount程序
- 浅谈网站流量劫持防范措施
- Hadoop集群(第6期)_WordCount运行详解
- linux正则表达式
- Hadoop学习笔记系列文章导航
- Hadoop学习笔记—4.初识MapReduce
- 腾讯云服务器上tomcat7使用Godaddy证书
- Linux下Opencv的安装及配置使用
- Linux下查看文件和文件夹大小
- hadoop的log日志查错
- 在Linux中,用什么命令可以查看到用户组中包含有哪里用户? usermod
- Linux磁盘分区和文件管理系统
- bbs 网站开发中常见前端问题及解决
- shell脚本
- Linux 设置SSH安全登录