【问题标题】:Event handling in a disconnected class断开连接的类中的事件处理
【发布时间】:2013-03-23 23:37:26
【问题描述】:

我正在寻找一种方法来处理 B 类中 A 类引发的事件,而无需耦合类。

情况是A类是一个状态机。当 A 类的状态变为活动时,我需要发送电子邮件。我想创建一个类来监听该事件并处理它。

我将状态逻辑封装在 A 类中,并从网页 (asp.net webform) 中对其进行实例化。

我也可以在 webform 中实例化 email 类,但我不希望这样做,在这种情况下,编写 webform 代码的开发人员将不得不连接逻辑和事件。我想将所有这些逻辑推回到业务层。但我似乎没有办法做到这一点。

在 BLL 中

class StateHandler()
{
    public event EventHandler StateChanged;

    SetState(int newState)
    {
        // to keep things simple for sample let's assume 2 states
        if (newState ==1 ) this.State = "Active";
        else this.State = "Inactive";

        if (this.StateChanged != null)
        this.StateChanged(this, new EventArgs());

    }
}

class EmailProvider()
{
    SendEmail()
    {
        // logic to send email
    }
}

Asp.net 页面

....
void OnSubmit_click()
{
    StateHandler sh = new StateHandler();

    //adds an event handler to the StateChanged event
    sh.StateChanged += new EventHandler(sh_StateChanged);

    //setting this will fire the StateChanged event
    sh.SetState(1);

}

【问题讨论】:

  • 您能否向我们展示您当前的代码,这样更容易提出最佳方法?

标签: c# email events design-patterns business-logic


【解决方案1】:

EventBus 可能对您的案例很有用。它只是一个将事件传递给注册订阅者的消息代理。我不知道是否有任何 C# 库。但是应该很容易实现。看看番石榴的EventBus。它是 Java,但你应该明白。

在像 EJB 这样的容器管理情况下,容器处理异步消息分派。再次在 Java/Java EE 中,您将拥有 Message Driven Beans。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多