XML建模

简介: XML建模

XML建模

一、概念

XML建模是指使用XML来描述和定义数据模型。

在XML建模中,可以使用标签,属性和元素来定义和描述数据模型。标签用于定义元素的名称和结构,属性用于描述元素的特征和属性,而元素则是XML中最基本的数据单元,它可以包含文本,其他元素或属性。

二、优点

XML建模的主要好处之一是它的可扩展性和灵活性。XML允许使用者根据应用程序的需求定义自定义标记和元素,以及可以通过使用现成的标准标记来定义模型。

一旦XML模型被定义并创建,它就可以用于许多不同类型的应用程序,例如Web服务,数据传输等

三、考虑因素

  • 定义模型的目的和规范
  • 确定要表示和描述的数据
  • 设计模型结构和元素
  • 描述元素和属性的语义
  • 确定可重复元素和引用模型中的其他元素的方法

四、核心思想

XML建模的核心思想其实就是Java面向对象思想,将xml里的内容视作对象来操作

面向对象:它将现实世界中的事物看作一个个对象,每个对象都有自己的属性和行为,并且能够通过与其他对象互动来完成一些任务

五、代码举例

这里有一个xml文件,需求是拿到第二个action里的第二个forward的path值,即welcome.jsp

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <action path="registerAction" type="test.action.RegisterAction">
    <forward name="success" path="index1.jsp" redirect="true" />
    <forward name="failed" path="register.jsp" redirect="false" />
  </action>
  <action path="loginAction" type="test.action.LoginAction">
    <forward name="success" path="index.jsp" redirect="false" />
    <forward name="success" path="welcome.jsp" redirect="true" />
  </action>
</config>

以面向对象思想来思考以上文件:

1.configModel对象中有一个属性(容器Map),能够以一对一的方式存储actionModel,增加和查询

2.actionModel 也有一个属性(容器Map) ,能够添加和查询forwardModel,还有属性path、type

3.forwardModel 有属性name、path、redirect

我们进行代码操作:

5.1初步代码

package com.xqx.modeldemo;
public class ForwardModel {
  private String name;
  private String path;
  private boolean redirect;
  public ForwardModel() {
    // TODO Auto-generated constructor stub
  }
  @Override
  public String toString() {
    return "Forward [name=" + name + ", path=" + path + ", redirect=" + redirect + "]";
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getPath() {
    return path;
  }
  public void setPath(String path) {
    this.path = path;
  }
  public boolean isRedirect() {
    return redirect;
  }
  public void setRedirect(boolean redirect) {
    this.redirect = redirect;
  }
  public ForwardModel(String name, String path, boolean redirect) {
    super();
    this.name = name;
    this.path = path;
    this.redirect = redirect;
  }
}
package com.xqx.modeldemo;
import java.util.HashMap;
import java.util.Map;
public class ActionModel {
  private String path;
  private String type;
  private Map<String, ForwardModel> fMap = new HashMap<>();
  public String getPath() {
    return path;
  }
  public void setPath(String path) {
    this.path = path;
  }
  public String getType() {
    return type;
  }
  public void setType(String type) {
    this.type = type;
  }
  public Map<String, ForwardModel> getfMap() {
    return fMap;
  }
  public void setfMap(Map<String, ForwardModel> fMap) {
    this.fMap = fMap;
  }
  // 压栈,将ForwardModal放入ActionModal
  public void push(ForwardModel fd) {
    fMap.put(fd.getName(), fd);
  }
  // 弹栈,从action中取出forward(查询forward)
  public ForwardModel pop(String name) {
    return fMap.get(name);
  }
}
package com.xqx.modeldemo;
import java.util.HashMap;
import java.util.Map;
public class ConfigModel {
  private Map<String, ActionModel> aMap = new HashMap<String, ActionModel>();
  // 压栈,将ActionModal放入ConfigModal
  public void push(ActionModel ac) {
    aMap.put(ac.getPath(), ac);
  }
  // 弹栈,从ConfigModal中取出ActionModal(查询ActionModal)
  public ActionModel pop(String path) {
    return aMap.get(path);
  }
}

5.2工厂模式

5.2.1简介

工厂模式是一种创建型设计模式,其目的是封装对象的实例化过程。在工厂模式中,我们将对象的创建任务交给一个工厂对象来完成,而不是由应用程序直接实例化一个对象。这能够有效地减少应用程序中的耦合度。

5.2.2优点
  • 避免了直接依赖,降低了应用程序的耦合度,提高了代码的可维护性和可扩展性。
  • 使用工厂方法来创建对象,可以根据需要在运行时动态地生成具体的实例。
  • 封装了对象的创建细节,使得对象的创建过程能够更加灵活。
  • 通过多态来实现对象的创建,增加了代码的可读性和可维护性。
package com.xqx.modeldemo;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * 工厂:生产数据
 * 
 * @author W许潜行
 *
 */
public class ConfigModelFactory {
  public static ConfigModel build() throws Exception {
    String xPath = "/config.xml";
    return build(xPath);
  }
  public static ConfigModel build(String xPath) throws Exception {
    ConfigModel cm = new ConfigModel();
    //获取xPath
    InputStream is = ConfigModelFactory.class.getResourceAsStream(xPath);
    SAXReader sr = new SAXReader();
    //读取
    Document doc = sr.read(is);
    //拿到所有action
    List<Element> action = doc.selectNodes("//action");
    for (Element actionEle : action) {
      ActionModel am = new ActionModel();
      //为path、type赋值
      am.setPath(actionEle.attributeValue("path"));
      am.setType(actionEle.attributeValue("type"));
      //拿到所有forword
      List<Element> forward = actionEle.selectNodes("forward");
      for (Element forwardEle : forward) {
        ForwardModel fm = new ForwardModel();
        //为path、name、redirect赋值
        fm.setName(forwardEle.attributeValue("name"));
        fm.setPath(forwardEle.attributeValue("path"));
        fm.setRedirect(!"false".equals(forwardEle.attributeValue("redirect")));
        //将forwardEle添加到action
        am.push(fm);
      }
      //将action添加到ConfigModel
      cm.push(am);
    }
    //至此config的数据全部读取完毕
    return cm;
  }
    public static void main(String[] args) throws Exception {
     ConfigModel build = ConfigModelFactory.build();
     ActionModel actionModal = build.pop("loginAction");
     ForwardModel forwardModal = actionModal.pop("failed");
     System.out.println(forwardModal.getPath());//welcome.jsp
  }
}

上述xml代码解析代码看不懂的,可以看我上一篇博客XML解析

我们这个ConfigModelFactory类的生产任务就是读取到xml文件的信息,以后不管是张三要拿到第二个action里的第二个forward的path值,还是李四想拿到拿到第一个action里的第一个forward的type值,直接来调用工厂的数据进行操作即可,而不必每次自己去解析读取数据,减少了代码的重复性

好啦,今天的分享就到此为止!希望你看完本篇文章有所收获,祝你变得更强!!!

目录
相关文章
|
6月前
|
XML 设计模式 开发框架
J2EE(xml建模)
J2EE(xml建模)
40 0
|
7月前
|
XML 存储 设计模式
XML系列(三)之 XML建模
XML系列(三)之 XML建模
|
7月前
|
XML 设计模式 开发框架
J2EE之XML建模(超详细)
J2EE之XML建模(超详细)
35 0
|
7月前
|
XML Java 数据格式
一.Xml建模之入门
一.Xml建模之入门
39 1
|
7月前
|
XML 存储 JSON
XML建模最详细介绍讲解
XML建模最详细介绍讲解
56 0
|
8月前
|
XML 存储 设计模式
XML建模
XML建模
41 0
|
6月前
|
XML 存储 开发框架
J2EE之XML建模
J2EE之XML建模
27 0
|
7月前
|
XML 数据采集 JSON
XML建模
XML建模
33 0
|
5月前
|
XML 存储 设计模式
xml建模
xml建模
31 0
|
5月前
|
XML 存储 数据库
xml建模----详细完整,易懂结合代码分析
xml建模----详细完整,易懂结合代码分析