我正在为一个评估工具寻找一个对象模型的一些指导。目前有两种类型的评价
这两个评估之间唯一的区别是表单在UI中呈现给用户的方式。同行评估将向团队中的同行表明,您应该根据某些标准进行评估,而团队评估将显示所有涉及到的团队都将根据某些标准进行评估。除此之外,这两项评价完全相同。
在建立对象模型时,我是否应该创建一个抽象的评估对象,然后将其子类为Peer评估和团队评估?或者我应该创建一个评估对象,并有两个属性来表示两种不同类型的评估?
今后可能会增加更多类型的评价。
发布于 2013-01-04 21:29:29
通常,如果类型只是一段信息,那么您可以将其作为一个字段。如果它用于更改方法的行为,如
public void foo() {
if (type == PEER) {
doSomething();
}
else {
doSomethingElse();
}
}然后,它指示您应该使用子类,并根据类型使用多态性来获得适当的行为。另一种解决方案是使用委托而不是继承,并将行为与类型关联起来:
public enum EvaluationType {
PEER {
@Override
public void foo() {
...
}
},
TEAM {
@Override
public void foo() {
...
}
};
public abstract void foo();
}
public class Evaluation {
private EvaluationType type;
public void foo() {
return this.type.foo();
}
}发布于 2013-01-04 21:29:48
仔细想想,在我看来,将这些信息存储在“评估”对象本身中是错误的。举个现实世界的例子--一个南瓜籽。现在,我可以种下种子,或者我可以烤和吃种子。事实上,对于一种特定的种子,我可以走这条路,也可以走另一条路,但不能两者兼而有之:有些种子被留出来供吃,另一些留出来供播种,但这种划分与种子本身没有多大关系。
因此,我建议在别的地方编码.也许您有一个EvaluationModel,它维护单独的集合(team ),并酌情将它们转发给UI。为什么评估应该关心别人如何使用它呢?你需要的是一个实体,它的工作是关心,让他画出什么区别,他将。
发布于 2013-01-04 21:33:55
获取接口的通用属性和方法,比如ICommon,然后让团队和对等方实现ICommon.
interface ICommon{
}
interface ITeam:ICommon{
}
interface IPeer:ICommon{
}然后实现每个接口( IPeer和ITeam),您的EvaluationManager (如果有)将知道何时实例化每个对象。
https://stackoverflow.com/questions/14165147
复制相似问题