对象的自治与智能化

  我一直强调对象是自治的,这意味着它应该拥有能表达自身对象特性的数据与行为,对自己的数据与状态负责,对于该数据而言,对象是自给自足的。对象的自治体现了OO最基本的原则,那就是“数据与行为应该封装在一起”。拥有行为能力的对象,就好比拥有了意识,拥有了智能,它可以自行判断,而无需别人通知。不错,这事实上就是“好莱坞原则”的体现,但我更喜欢将其称之为对象的“专家模式”。这种专家模式与现实社会何其相似,“专业的事情就交给专家去做吧!”软件系统的对象应该各司其职,各尽其职,这样才能产生合理的职责分配,从而形成完善的协作方式。

  还是用案例来说话。在我们的项目中,需要对客户发出的Web请求进行处理,获得我们需要的参数。参数的值放在Request中,而我们事先已经根据配置文件,获得了参数的类型信息。根据项目需要,我们将参数划分为三种:
  1、单一参数(SimpleParameter);
  2、元素项参数(ItemParameter);
  3、表参数(TableParameter);

  因为参数的属性是在配置文件中已经配好,我定义了ParameterGraph对象。它能够读取参数的配置信息,并根据参数的类型创建不同的参数对象。这些参数类共同继承了一个抽象的父类ParameterBase,并实现了Parameter接口,如下图所示:

  由于参数的数据放在客户端发出的Web请求中,因此,我们需要对Web请求进行解析。由于Web请求存储的参数值事实上是存放在一个Map中,我们需要根据参数的name来甄别这些请求值,并根据一定的判断逻辑,将Web请求传来的值填充到Parameter对象中。这是一个收集参数的过程,它被定义在ReportParameterAction类中。最初,我是这样实现的:

private Map<String,Parameter> collectParameters(ServletRequest request, ParameterGraph parameterGraph) {
for (Parameter para : parameterGraph.getParmaeters()) {
Map<String,Parameter> paraMap = new HashTable<String, Parameter>();
if (para instanceOf SimpleParameter) {
String[] values = request.getParameterValues(para.getName());
para.setValues(values);
paraMap.put(para.getName(),para);
} else {
if (para instanceOf ItemParameter) {
ItemParameter itemPara = (ItemParameter)para;
for (Item item : itemPara.getItems()) {
String[] values = request.getParameterValues(item.getName());
item.setValues(values);
}
paraMap.put(itemPara.getName(),itemPara);
}else {
TableParameter tablePara = (TableParameter)para;
String[] rows = request.getParameterValues(para.getRowName());
String[] columns = request.getParameterValues(para.getColumnName());
String[] dataCells = request.getParameterValues(para.getDataCellName());

int columnSize = columns.size;
for (int i=0; i < rows.size;i++) {
for (int j=0;j < columns.size;j++) {
        TableParameterElement element = new TableParameterElement();
element.setRow(rows.get(i));
element.setColumn(columns.get(j);
element.setDataCell(dataCells[columnSize * i + j]);
tablePara.addElement(element);
}
paraMap.put(tablePara.getName(),tablePara);
}
}
}
return parameterGraph.getParameters();
}

it知识库对象的自治与智能化,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。