小P的专栏

入门资料,图文教程

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

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

阅读本文,你必须已经使用过至少一种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...)|编辑

评论

#nanhey 发表于2005-12-01 19:42:00  IP: 219.230.99.*
你好,我看到你在论坛里面发的贴了,我在那个帖子里面描述了我遇到的问题,同时我把问题也发在另外一个版块了:
http://community.csdn.net/Expert/topic/4426/4426894.xml?temp=.4400751
楼主和各位朋友有时间的话讨论一下,谢谢。
#nanhey 发表于2005-12-04 19:25:00  IP: 219.230.99.*
还有一个问题,是关于真正在项目里面用的时候,(AgileFlow)怎么结合流程控制和具体业务操作来实现具体的任务呢?
我发到论坛里面了,cm4ever有空的时候帮忙看下吧,谢谢了。
http://community.csdn.net/Expert/topic/4437/4437316.xml?temp=2.114505E-02
#nanhey 发表于2005-12-04 14:18:00  IP: 219.230.99.*
To:cm4ever
你好,我前段时间在论坛里面发了上面我说的那个贴,然后你推荐我去看杨洪波实现的AgileFlow。我下到了AgileFlow以后看了他的代码。发现我前面做的工作真的是重新在造轮子了,而你以前这样说的时候我还不以为然,:P。其实我以前写的东西只是他系统里面的很小很小的一部分,权限管理和跟数据库的交互等等很多部分都没考虑到。
再次谢谢你,还有AgileFlow的作者HongSoft。
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © cm4ever