yii

Yii 2.0 框架学习笔记-基础抽象

Yii 框架从 2.0 开始,底层抽象上面发生了一些变化。比如,多了 DI 和 Service Locator 等设计模式相关的抽象。这两天,专门看了下代码,写下一点我的想法。

上面的图是,是我用 Visual Paradigm 画的类图。从图里我们看到,2.0 版本以来,最根部的抽象是一个叫 Configurable 的接口,其主要作用就是说明所有的类都可以用类似 Key-Value 结构来进行配置。除了一些 Helper 的类,绝大部分对象都是 Configurable 的实现。

打开 Configurable 的代码,发现是一个空的接口,所以,我认为作者这是要表达一种抽象层面的概念,并没有实际的用途。查了 Stack-Overflow ,据说这是原自 Java 里的一种惯用做法,不过说实在的,我还是没有太理解,全空用来表达概念,可能是出于某种性能层面的考虑。但是,读起来确实有点故弄玄虚的错觉。

Keep Reading — 1441 words totally

今天下午,我在 Yii 框架 1.x 下,写一个数据处理脚本,脚本的功能主要是把一个超过百万行的表中的两个字段,同步到一个新表中。按照一般的想法,我写了如下的代码。

因为表的总数据量超过百万,所以,这个代码片段,以 2000 行数据为一个批次,分次将数据插入到新表中。原以为顺利完成任务的,结果在 Console 环境下一执行,发现总是到了 696000 行数据的时候,脚本就自动退出了,而命令行环境基本没有报错,按照我一般的经验,这个脚本自动退出又没有报错的原因,基本就是因为内存使用超限,于是,我加了一些内存统计代码来验证这个事情。

Keep Reading — 1213 words totally

之前已经写了蛮多的跟这个事件驱动特性有关的内容了,比如我今天发现,Yii框架支持的事件驱动,只能支持对对象实例进行事件绑定。简单来说,当你要绑定某个事件的时候,这个事件的触发者的对象,必须已经建立好了。

之前,我们聊过,事务应该尽可能写在Model里,而跟其他的无关。对于有些业务场景,构造某种对象,本身就是一个业务。因为构造这个对象太过有特点,以至于,我认为应该也封装在Model里面供别的业务去复用。

这个时候,如果碰巧有个业务要在该对象构造的时候,触发某个行为,那么总不能把事件绑定到Model里面去,这就显得很奇怪了。

Keep Reading — 863 words totally