原创  Shark中xml-object映射的设计 收藏

阅读本文,你必须已经使用过至少一种xml类库如dom4j,jdom等。

 

Shark对于每一个标签的映射类提供一个fromXML(Element element)方法(xml的标签中填充属性值)

 

然后我们用以下两个类描述一下之间的协作:

<workflow-process>标签对应WorkflowProcess(流程)类。

<workflow-activity>标签对应WorkflowActivity(活动)类。

<workflow-process>标签中包含一系列<workflow-activity>标签,也就是说WorkflowProcess中是这样定义的:

public class WorkflowProcess

{

       private String name = ""; // 流程名称

       private List activities = new ArrayList(); // 列表的元素是WorkflowActivity

 

       // 接着看fromXML的操作

       public void fromXML(Element element)

       {

              // 先处理本类所需要的非集合型的属性

              name = element.attribute ("name").getValue(); //获得参数name的值<workflow-process name="名字">

              // 其他非集合型的属性略

 

              // 处理集合型的属性

              List activityElements = element.getChildElements("workflow-activity"); // 获得流程标签<workflow-process>下所有活动子标签<workflow-activity>

              for (int i = 0; i < activities.size(); i++)

              {

                     Element activityElement = (Element)activityElements.get(i);

                     WorkflowActivity activity = new WorkflowActivity();

                     activity.fromXML(activityElement); // 让活动调用自己的从xml填充属性值方法

                     activities.add(activity); // 构造完毕,添加到活动列表

              }

       }

}

 

这样,每个类负责自己属性的填充,职责明确。

另外,如果你使用了类继承,子类可以直接调用父类的方法,仅负责子类特有的属性,这样只关注自身的特性,符合现实,将使程序更易懂。

 

p.s.

shark的这套设计和我写的文档有些不同,但是我为了简单易懂,把他简化了。

还有虽然方法返回void,但我认为返回一个对象比较好。也可以写成static,就成为一个构造函数,可以追追潮流,我们叫他xml factory method好了 :D

发表于 @ 2005年12月01日 17:35:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:bug? Hbm2JavaTask无法实现joined-subclass单独配置文件(2.1.2) | 新一篇:用工作流引擎实现工作管理项目(Shark+JaWE+Tomcat)

  • 发表评论
  • 评论内容:
  •  
Copyright © cm4ever
Powered by CSDN Blog