标签: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