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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值