标签:blog http ar 使用 sp for on div 2014
缘起
之前的搭架子经验主要是基于【面向接口】的方式开发的,通过接口方式暴露业务规则和定义。依赖的层次与类库通过接口方式进行嫁接。
这种模式适合业务规格较清晰和归纳简单的模块,但是对于某些小粒度, 业务不易归纳的功能与模块来说,想要建立原则与约束就会变成奢望,因为很难抽离出明显的规则与约束。
这对于这点我们希望以纵向的管道方式进行隔离,取代横向的面向对象的建立业务。
业务驱动通道

之前的方式(右侧)为依据规则进行嫁接,左侧(黄色)则是通过建立业务驱动管道的方式进行衔接。特点是:在整个通道的一端进行事件触发,通道中进行业务校验,通道结果端接收业务过滤结果进行相应的操作。
后来思考了之后感觉思想有些像所谓的【事件驱动】。
事件驱动
事件驱动包含三要素:
事件源:能够接收外部事件的源体。
侦听器:能够接收事件源通知的对象。
事件处理程序:用于处理事件的对象。
查阅了一下,对于【事件驱动】使用最经典的是windows操作系统,最简单的理解就是,用户界面点击一个按钮,按钮是事件源(可以引发事务的物体),并产生事件参数Event,包含事件源信息;
整个系统中某些模块具有可以感知按钮点击点击的能力称之为【监听器】,监听器之前已经被声明为对于某种事件感兴趣,这样他会专门监听某种事件,有自己的实现。
事件本身拥有一个完整的声明周期,所以将事件联系起来就形成【事件集合】周期。
简单例子
简单的代码表面想法
public interface DoEvent
{
String GetName();
}
public interface Listener
{
void HandleEvent(DoEvent e);
}
public interface EventSource
{
void addListerner(Listener l);
void removeListerner(Listener l);
void fireEvent(DoEvent e);
}
声明时间三要素【事件源】,【监听器】,【事件管道】;
事件
public class Click : DoEvent
{
public string GetName()
{
return "click";
}
}
public class DoubleClick : DoEvent
{
public string GetName()
{
return "double click";
}
}
事件源,button是具有引发事件的事务
public class Button:EventSource
{
private List<Listener> listeners=new List<Listener>();
public void addListerner(Listener l)
{
listeners.Add(l);
}
public void removeListerner(Listener l)
{
listeners.Remove(l);
}
public void fireEvent(DoEvent e)
{
foreach (var listener in listeners)
{
listener.HandleEvent(e);
}
}
}
事件管道监听者
public class 台式机 : Listener
{
public void HandleEvent(DoEvent e)
{
System.Console.WriteLine("我属于台式机,名字是{0}", e.GetName());
}
}
public class 笔记本 : Listener
{
public void HandleEvent(DoEvent e)
{
System.Console.WriteLine("我属于笔记本,名字是{0}", e.GetName());
}
}
public class 手机 : Listener
{
public void HandleEvent(DoEvent e)
{
System.Console.WriteLine("我属于手机,名字是{0}", e.GetName());
}
}
调用
static void Main(string[] args)
{
台式机 tai=new 台式机();
笔记本 bi=new 笔记本();
手机 shou=new 手机();
Button btn=new Button();
btn.addListerner(tai);
btn.addListerner(bi);
btn.addListerner(shou);
btn.fireEvent(new Click());
System.Console.WriteLine("------------------------");
btn.removeListerner(shou);
btn.fireEvent(new DoubleClick());
System.Console.Read();
}
更完整的思考与使用在以后继续介绍,这里只是引发个思考。
标签:blog http ar 使用 sp for on div 2014
原文地址:http://www.cnblogs.com/xiguain/p/4127502.html