花有颜色,是指“花类”作对象看待,它有某一属性,叫颜色,即“某一属性=颜色”是特征,而非“颜色”是特征。
花是红色,此时的花不是指“花类”,而是指“某花”,它有颜色,是红色,即“颜色=红色”是特征,而非“红色”是特征。 ...
1)
花有颜色,花是指“花类”;花是红色,花是指“花对象”?这是哪里的规矩?
我说这枝花有颜色,不行吗?“颜色”就是特征,颜色就是从这支“花”(模型)上剥离的特征,凝聚特征时,就是“花有颜色”。
我说这类花是红色的,不行吗?“红色”就是特征,红色就是从这类“花”(模型)上剥离的特征,凝聚特征时,就是“花是红色的”。
2)
“花是红色”,特征剥离后为“花”;特征凝聚后变成“花是红色的”。“红色”是一种状态特征或结构特征。凝聚的伪代码表示就是(flower.color = red)。
“张三是经理”,特征剥离后为“张三”;特征凝聚后变成“张三是经理”。“经理”是一个角色,是一种行为特征。凝聚的伪代码表示就是(zhangsan.role = manager)。
模型的特征是什么?“什么”即可表示特征,而不是“特征是什么”才叫特征?属性和特征在英文中皆可译为attribute。
电流I表示为I(t) = 2t+3,2t+3就是特征。
直线L表示为 y = 2t+3, 2t+3就是特征。
在上解析几何课时,2t+3表示直线的特征;在上电路分析课时,2t+3表示电流的特征。在特定的场景中模型凝聚特征后会自然明确其含义。
如果你认为 “I(t) = 2t+3”才是特征,那么如何复用"2t+3"这个剥离出来的特征呢?
I(t) = 2t+3是特征,没错!但它只是表示电流的变化特征;除了电流(模型)外,别的模型(直线)还能复用吗?
特征关心“what"甚于"who"和"which",这也是DDD一书对Value Object的定义,只关心是什么,不关心它们是谁或者是哪一个。
再看看我对特征的定义,强调的是什么,是“相对独立”。“相对独立”的一种解释即关心“what”甚于关心“who”或“which”。
花与红色是相对对立的概念,张三与经理是相对对立的概念,才将颜色与经理剥离出来,供别的模型复用。
红色是模型的一种状态特征,经理(角色)是模型的一种行为特征。
这套原语的数学描述。
1)模型,表示为一组时间函数,包含状态特征和行为特征。
model = {f1(t),f2(t),...};
2) 特征,从模型的一组时间函数中,提取相对独立的状态特征和行为特征。
state = {f1(t),f2(t),...};
behavior = {f1(t),f2(t),...};
3) 场景,在场景模型凝聚特征持续一段时间(如从t0时刻到t1时刻)。
context => model-state-behavior = {f1(t0->t1),f2(t0->t1),...}。