zoukankan      html  css  js  c++  java
  • NopCommerce商城系统中的eventbus

    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)

        {

           //验证用户,验证成功

           //调用日志服务,将登陆信息记录到数据库

          //调用缓存服务,将用户权限放到缓存里

        }

    }

    注意绿色部门都是用户登录之后操作的事情,我们会不会考虑将这两个操作当作一个事件,也就是表示这两个相当于用户登录关联的消费者,使用事件发布的方式来处理。

    演变之后:

    定义用户登录事件:

    //用户消费者
    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));

        }

    }

    简单写了一下

     

  • 相关阅读:
    总结PLSQL的快捷键以及使用技巧
    WebStorm 常用快捷键
    bootStrap小结3
    bootStrap小结2
    bootStrap小结1
    DataTable操作
    2017春 前端自动化(一)构建工具的搭建
    前端自动化之(一)—浏览器自动实时刷新
    基于div表单模拟右对齐
    纯css去实现loading动画效果图
  • 原文地址:https://www.cnblogs.com/alexhack/p/5285224.html
Copyright © 2011-2022 走看看