四色原型四种角色如何交互呢?

11-08-25 mistbow
四色原型的帖子基本都看了一遍,COLOR UML那书也看了一些。感觉还是迷糊哇。哪位大牛可不可以再讲讲四色是怎么设计的啊,虽然知道是什么人在什么地方做了什么事,但是它们之间如何交互还是不太了解,求大牛解惑啊。急切等待大牛的回答55555。最好有点代码这样能好理解些。嘿嘿

2
mistbow
2011-08-25 21:41
直接问问题不太好,我写写我目前能写出来的代码,就举个维修电脑的例子吧。

首先是ppt电脑类:

package com.neu.edu.ppt;

import com.neu.edu.desc.ComputerDesc;

//ppt

public class Computer {

private String seriesNumber;

private float price;

private ComputerDesc computerDesc;

//省略get set方法 要不太长了

}

Desc类:应该是对电脑类的描述吧,不太确定

package com.neu.edu.desc;

public class ComputerDesc {

//型号

private String type;

//类型

private String form;

}

Role类:出毛病的电脑

package com.neu.edu.role;

public class ComputerMaintain {

private String bug;

}

MI:

package com.neu.edu.mi;

import java.util.Date;

import com.neu.edu.role.ComputerMaintain;

public class Maintain {

private Date maintainDate;

private String result;

//下面这个属性不知道应不应该包含?

private ComputerMaintain computerMaintain;

public String findReason(ComputerMaintain computerMaintain) {

return "";

}

public void maintainComputer(ComputerMaintain computerMaintain) {

}

}

现在就是有一个严重的问题,就是如何让电脑类Computer进入到角色(Role),然后完成电脑的毛病查找和维修。求大牛指点。先感谢了。真的太想学会四色原型了。大牛们帮帮我吧。

banq
2011-08-26 09:48
你很厉害,四色原型直接干出代码。

四色原型是对需求的一种分析,并不能一步到位映射到代码,特别是Java代码,映射到Scala或JS倒是有可能,也要结合DCI再进一步细化一下。

jdon007
2011-08-26 09:55
2011年08月25日 21:41 "@mistbow"的内容
就是如何让电脑类Computer进入到角色(Role),然后完成电脑的毛病查找和维修。 ...

在静态语言中,可以在Role的构造函数(contructor)将PPT传入;或者将Role设计为事件监听器(Listener),通过设值函数(setter)将Listener传给PPT。Role/Desc与PPT是相对独立的,静态方法的缺陷在于无论采用哪种方法,PPT或Role都有一个略显多余的字段,动态语言可以克服这一些缺陷,但仍不够完美,动态语言的灵活性缺失了静态语言的约束性。这需要平衡与取舍。

在《领域驱动设计之我见》一贴的后半部分,我使用自己的“四象图”(建模原语:模型、结构/状态特征、行为/功能特征、场景)来包容“四色原型”、“DDD"、"DCI”等割裂分析、设计、实现的方法论。

你的问题属于“凝聚特征”这一开放的课题,如果你熟悉GoF的设计模式,其7个结构型模式,都可以用来凝聚状态或结构特征;11个行为型模式,都可以用来凝聚行为或角色特征。比如事件监听器的基本思想与观察者模式如出一辙。

与“凝聚特征”相对应的“剥离特征”这一开放的课题,也值得探讨,我认为你上面“剥离特征”(Desc和Role)的思路就可能存在问题。剥离特征的基本思路有两个:一致性与交互性。“一致性”剥离“状态或结构特征”(Desc),“交互性”剥离“行为特征”(Role)。

强调一下,特征凝聚与剥离属于开放的课题,不要局限于我上面的建议,尽管我认为这是思考的基本方向。事实上,特征剥离的思路不止“一致性”与“交互性”,特凝聚的方式也不止“结构型”和“行为型”的设计模式。

GoF模式缺少时间的概念,没有思考并行模式,其背后的世界观是“事物观”。而四象图这一方法论背后的世界观可以从“事物观”迁移到“事实观”,这要求四个术语的定义要回归到其数学描述上去,特征剥离的思路“一致性”与“交互性”仍然有效,但也有其它的方法,这里我就不再多论述。因为“事实观”(最早由uda1341提出的Fact-Oriented Programming)的普及程度远不如(Object-Oriented Programming)。

例子很简单,特征单一,凝聚的方式,就用简单的构造传参示意一下。注意我剥离特征的思路(一致性与交互性),这很重要,这个环节出错了,凝聚特征将失去基本的意义。代码是用普通编辑器编写的,可能出现拼写错误,而且这个例子的需求语义不够清晰,我只能想象补充一下,仅供讨论。

模型, 你可以理解四色原型的PPT

public class  Computer {     
	private String username;	
	private String boughtTime;
	private String price; 
	private String brand;      
	private ComputerConfiguration cc;
	// getter/setter
	public Computer(String username, String boughtTime, String price, String brand, ComputerConfiguration computerConfiguration) {
		this.username = username;
		this.boughtTime = boughtTime;		
		this.price = price;
		this.brand = brand;
		this.computerConfiguration = computerConfiguration;			
	}
}
<p>

结构特征或状态特征,你可以初步理解为四色原型的Desc

publilc classs ComputerConfiguration {
	private String cpu;
	private String keyboard;
	private String hardDisk;
	private String memory;
	private String motherBoard;
	private String monitor;      
	// getter/setter
}
<p>

行为特征或功能特征,你可以初步理解为四色原型的Role

public class ComputerInRepairing{
	private String reason;	// 哪里坏了
	private String orderNo; // 订单编号
	private String startTime; // 送来修理的时间
	private String endTime; // 修理完的时间
        private String chargedPrice;//收费价格
	
	private Computer computer;
	
	
	public ComputerInRepairing(Computer computer) {
		this.computer = computer;
		this.startTime = new Date();
	}	
       // getter/setter	
}
<p>

场景,你可以初步理解为四色原型的MI。

pubic class RepairComputer {
       private ChargeStrategy;  // 收费策略
       private String repairer; // 修理人

	public void repair(ComputerInRepairing computer) {
             // repaire the computer
             // charge to customer
	}

}
<p>

场景规约,你可以初步理解为DDD的Specification。

public class ChargeStrategy {
	public String repairHardDisk() {
              return "50$";
	}

	public String repairMotherBoad() {
             return "20$";
	}
 }
<p>

[该贴被jdon007于2011-08-26 10:38修改过]

mistbow
2011-08-26 10:57
感谢banq大的回答O(∩_∩)O~

让banq见笑了,我看四色模型在分析需求的时候,写出来的4种颜色的模型,很像交互图里面的类,我就一个直接可以转化成java代码。现在我知道了四色原型是用来做需求分析的。但是四色原型分析完了该做什么呢,下面我就不知道了?是不是四色原型得出的相当于分析类呢?然后再在这个分析类的基础上,来确定最后要编写的类?但是我怎么感觉还是可以转化成java代码呢?就比如下面jdon007不就是写出来了吗。还是因为我这个例子比较简单,分析类Computer直接就是最终的了,所以才能写出来呢?

猜你喜欢
4Go 1 2 3 4 下一页