似乎大家在讨论的时候有少了一个环节,编译分析,动态语言和静态语言有一个很重要的区别编译时类型检查,而动态语言是运行时检查,这变成了都是在运行的时候才知道这对象没这属性,所以动态语言也是有他的弊端存在,如果完全对象化的情况就像javascript ,举个例子
var life = {};
for(life.age = 1; life.age <= 3; life.age++)
{
switch(life.age)
{
case 1: life.body = "卵细胞";
life.say = function(){alert(this.age+this.body)};
break;
case 2: life.tail = "尾巴";
life.gill = "腮";
life.body = "蝌蚪";
life.say = function(){alert(this.age+this.body+"-"+this.tail+","+this.gill)};
break;
case 3: delete life.tail;
delete life.gill;
life.legs = "四条腿";
life.lung = "肺";
life.body = "青蛙";
life.say = function(){alert(this.age+this.body+"-"+this.legs+","+this.lung)};
break;
};
life.say();
};
当我在某处调用的时候我一定要知道其生命周期是进行到哪步了我才能知道其包含了那些特质
假如我在 age=1的时候 我调用了 life.tail结果将是 没有相关属性 而这也只有在运行时你才能确定。

所以当对象发生改变的时候只有非常清楚这点的人才能得心应手,对于那些空降兵,将是一大堆的抱怨。

DCI的思想是好的,但是如何才能从多方面则中考虑,还是有待探索。

对dci接触不久,从各位的描述来看,是不是我们又回到了贫血模型上去了(业务和数据分开),或者和面向过程的设计方法很像。