代码之家  ›  专栏  ›  技术社区  ›  blank

为什么要使用JavaBean绑定属性而不是事件?

  •  2
  • blank  · 技术社区  · 16 年前

    绑定属性的具体意义是什么?对我来说,它们似乎是使用eventObjects的事件类型安全性较低的版本-使用event.getPropertyName()的字符串相等性检查似乎有点弱。

    你为什么要用一个而另一个?

    3 回复  |  直到 13 年前
        1
  •  1
  •   Bill K    13 年前

    Java bean的要点是,系统(GUI Builder,特别是)可以检查Java bean并配置它,而不必对该组件有任何先前的知识。

    虽然这相当酷,但它只在这种特定的情况下才真正有用,而且这些天注释的效果会更好。

    所以他们使用绑定属性的原因仅仅是为了支持这种嵌入式的GUI组件技术,而且我不希望它胜过事件,除非您需要支持反射式的GUI构建系统。

    对@mike啮齿动物的反应

    假设您允许您的用户创建一个您将控制的类。这个类有一个“主”类,可以处理几个事件。

    通常情况下,您的用户会这样做:

    class UserClass(someClass) {
        void mainMethod() {
            someClass.addEventListener(new EventListener() {
                public void eventsHappen(Event e){
                        event1(e)
                    }
                }
            }
            someClass.addDifferentEventListener(new DifferentEventListener() {
                public void eventsHappen(DifferentEvent e){
                        event2(e)
                    }
                }
            }
        } 
    
        public void event1(Event e) {
            //java code for event 1
        }
        public void event2(DifferentEvent e) {
            // java code for event 2
        }
    }

    不管怎样,你明白了。当然,您假定这个类是在某个地方注册的——可能在XML/config文件中。您读取它,实例化它并执行mainmethod(由协议或接口定义),它注册自己并开始调用事件处理程序。

    现在,您可以通过注释来完成相同的事情:(您可能认识到这个模式——JUnit对测试进行注释的方式就差不多了。)

    class UserClass() {
        @Event1
        void event1Method(Event e) {
            event1's code
        }
        @Event2
        void event2Method(AnotherEvent e) {
            event2's code
        } 
    }
    

    这是更直接的前面和删除大多数样板文件,它也删除了协议或接口的需要,注释是更明确的定义和独立的。(如果您想检查传递到方法中的参数,实际上甚至不需要事件注释,但是dragons位于这个一般的方向上)。

    您仍然需要在某个地方注册类,但这次您只需扫描每个方法以查找事件注释并自己注册它们。由于只需要几行代码就可以读取和处理这样的类,为什么要将此模式限制为单元测试呢?

    另一件事我发现非常整洁,我用这个模式,Groovy类,“插入”到我的Java程序。因为我是在一个给定的目录中编译所有类,所以扫描注释是很简单的。对用户的影响是他插入(或编辑)一个正确注释的groovy文本文件,我的代码立即编译、集成并开始调用它们的事件处理程序。

        2
  •  0
  •   helios    16 年前

    我认为JavaBeans规范的设计考虑了通用对象处理。例如,将JavaBean放到一个IDE中,并使用可视化属性编辑器来配置它。在这种情况下,IDE将使用常规的PropertyChangeEvent等。

    或者,如果要将相同的命名属性从bean复制到另一个bean…这是bean使用的另一种情况(beanutils类)。

    但是,如果你计划做一些具体的事情,就像诺埃尔·昂说的那样,我建议你打字要有力。

        3
  •  0
  •   Noel Ang    16 年前

    JavaBeans是一种规范。它将绑定属性定义为其修改导致发出通知的属性,而PropertyChangeEvent是已批准的通知实体。

    所以假定的JavaBeans规范bean编辑器应该监听propertyChangeEvents。除了使用这个规范的必要性之外,我自己也不会使用它。