用于存储用户数据的JAVAFX体系结构

时间:2016-08-22 05:35:57

标签: javafx

我是JAVAFX的新手。我刚开始研究如何存储用户文件,在我的情况下我不想使用XML。我正在创建一个过去在perl中完成的工具的新版本。用户文件是基于文本的,并使用专有定义完成。

作为一个例子

PROJECT_NAME some_device;
DATA_BUS_WIDTH 32;

LINE_TYPE_A name_A mask:0xFFFFFFFF default:0x00000000 "Some documentation about this line type
 SUB_LINE_TYPE_A_0  sub_name_0  PROP0 "Some documentation about what the sub line does";
 SUB_LINE_TYPE_A_1  sub_name_1  PROP0 "Some documentation about what the sub line does";
LINE_TYPE_B name_B PROP_2 Size:0x1000 "Some documentation about this line type - important Linetype B has different properties than the previous line type A"
 SUB_LINE_TYPE_B_0  sub_name_0  "Some documentation about what the sub line does";
LINE_TYPE_C name_C  Other PROPs "And more documentation"

我正在考虑做的是创建一个文档类,然后创建一个包含每一行的数组。但问题是文档类将包含一组对象,其中有三种(甚至更多)类型的对象。 LINE_TYPE_A,LINE_TYPE_B等对象,每种类型都有不同的属性。我熟悉创建一种对象的数组。创建一个包含多种类型的数组对我来说似乎很奇怪,但似乎应该有一种方法。当我浏览列表时,我必须能够查看每个项目,并说,您是TYPE A或您的TYPE C,所以我可以适当地处理数据。

这是创建自定义文档格式的正确方法吗?或者我还应该做些什么呢?尽管如此,我确实希望远离XML。

1 个答案:

答案 0 :(得分:0)

有几种方法可以用来构建这个:

A)定义数据结构,比如说DataLine,以保存您的数据。它将包含特定行中的所有信息:TYPEname等。然后继续您想要执行的操作:

class Document {
    //array or list or some other collection type of `DataLine`
    DataLine[] lines;

    void doStuff() {
        for (DataLine line : lines) {
            // line.getType(), line.getName(), etc
        }
    }
}

B)定义一个基于继承的结构,它将隔离常见的字段/查询方法,例如

// abstract class if you have some common methods or interface
abstract class DataLine {

    abstract DataType getType();
}

// some specific data that belongs to only TypeA
class DataLineTypeA extends / implements DataLine {

}

class Document {
    //array or list or some other collection type of `DataLine`
    DataLine[] lines;

    void doStuff() {
        for (DataLine line : lines) {
            // can also check with getType() if you have it stored
            if (line instanceof DataLineTypeA) {
                DataLineTypeA typeA = (DataLineTypeA) line;
                // do stuff with typeA specific methods
            }

            // etc.
        }
    }
}

最后,如果您有正式的数据定义,或者使用像JSON这样的中间格式,您可以创建自己的数据解析器。或者,您可以使用默认的Java serialization mechanism

使数据持久化