• 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));

        }

    }

    简单写了一下

     

  • 相关阅读:
    总结的CSS简写表
    ASP.net 2.0:我还有多少秘密你不知道?(1)
    判断自然数的阶乘大于等于400,然后计算此数的平方,再一次减1计算其平方和,直到数字减小到0(演示Exit DO)
    JSP留言板程序开发过程
    double>string的时候,如何保留两位小数?
    asp如何清除html代码
    利用ASP.NET来访问Excel文档
    C#日期函数所有样式大全
    ASP.net在线购物商城系统完全解析
    创立公司的准备
  • 原文地址:https://www.cnblogs.com/alexhack/p/5285224.html
Copyright © 2020-2023  润新知