在校内论坛回一篇帖子,唧唧歪歪了这么多,呵呵。
基于属性编程其实很简单,原理就是给类以及类的成员附着一些东西,这些东西人称元信息。这个名词的出现应该也是由于计算机界好发明buzz word的结果。当然你也可以辩称是由meta一词引申而来,但是无所谓,我看见的就是有人因为名词而迷惑。
这份元信息,在.net中的名字是attribute,在java中的名字叫annonation,其实是差不多的东西。具体的做法就是用[]或者@标记一下类或者类成员。[]中的是像MyAttribute(x,y)这样的东西,其实和new MyAttribute(x,y)是一样的。结果就是把一个instance附着到了一个类上面。因为.net和java的类是动态存在的,用术语说是能够自省的。所以可以通过reflect得到这个类上面附着的attribute的内容和类型。
这样带来的好处是描述一个类或者一个类成员除了本身的接口,本身的type,本身的一些结构上的信息之外,你还能给他更多的描述。这样的描述怎么用,就可以充分发挥想象力的了。
目前主要的一些用法是像这样的[WithTransaction],然后事务处理就会添加上。基本上是说用属性来“要”一些服务。但是这样作是不好的。推荐的做法是用属性来描述你的类或者类成员是干什么的,而不是你要什么。不过由于目前技术的发展的一些限制,这样用attribute来表示要什么的阶段还会存在很长一段时间。
最重要的是不要把基于属性编程看作什么新东西。从前你用全局变量,然后程序根据全局变量的值来改变行为。后来你用静态变量,后来你用配置文件,后来你用xml配置文件。现在只不过让你存放这种信息多了一个场所——类本身。这个就是属性带来的。可以说属性能够作的,其他的办法也能作,只不过由于属性和类是贴身的关系,带来了其不可替代的优势。具体说这种贴身的关系就是在xml中
<class name="..">
<myattribute>..</myattribute>
</class>
你必须额外用一些字段来关联你定义的属性和类。但是用了语言自身提供的属性,这种绑定就是天然的,内省的。这个也就是属性最大的价值和力量的源泉。