组件扯得有点多了,不过,确实是因为这个东西事关重要,是整个Yii框架所有对象得基类,确实值得去花功夫透彻理解。接下来看以下Module,翻成中文是模块,或者模组,看了这个东西的实现后,我更倾向于模组。因为最小的功能单位是组件,然后若干组件的逻辑集合,就是Module了,这么看,模组更形象一点,事实上几个模组在一起,可以组成一个更大的模组。模组里面的公有成员变量很少,主要就是一个$preload和$behaviors,剩下的都是一些刚才提到的属性,这个在图里比较好区分,属性我没有用$开头。模组主要就是管理自身组成的组件,其他模组,以及相关的路径信心,参数配置信息等。功能比较简单,就不多说了。
然后看一个非常特殊的模组,也就是我们说的应用(Application)。应用的实质就是一个模组,那么它到底特殊在什么地方呢?在我看来,主要有:首先是多了一些应用属性的配置,比如路径、语言、编码格式、日期格式、数字格式等等;其次是多了一些缺省的组件,有DB,Request,UrlManager等等,最后,应用比普通模组多了一些方法,比如run,代表运行,就像C程序的main函数一样,是整个应用的执行起始点,再比如processRequest,专门处理请求的函数等等。Application类看起来虽然东西很多,事实上,其思路非常清楚,功能也相对简单,所以,也没有什么太多好说的。
最后要说的是Model,有即模型,不过我觉得这个中文词不太能表达Model的意思,我后面还是用原来的单词。CModel是Model的抽象类,虽然代码很多,很长,其功能同样,相对比较简单,画出图来后,我们不难对Model进行一个归纳,就是一组属性的集合,所有的方法都是在管理属性。属性的读写、属性的验证、属性验证后的错误管理等等等等,此外还有很多属性验证器的管理。特别想说的一点,这个Model里面放入了对属性标签的管理,就是每个attribute都有对应的label,事实上,这些东西应该属于展示用途的,而Model在定义上,应该更加关注数据抽象,而不应该关注表现,我不知道原作者这里到底是怎么想的,这些label之类的东西,理论上不应该进入到抽象类里面的,至少我不这么认为。不过,关于label的方法都是一些空方法,也还可以忍受吧。最后一提,Model里有个scenario的概念,中文就是说的是场景,关于这个东西,我理解得还不是太透彻,今后如果有机会,再做说明。

VP UML功能是非常强大,用起来也方便。就是卡了点~~
缺点不止一个卡,社区版本,超过一张diagram,输出后会带上很密集的水印,很恶心。
是的,水印相当的多。。。根本没法拿出去给人看。。。