Java 什么';处理表行数据结构的最佳模式是什么? 事实

Java 什么';处理表行数据结构的最佳模式是什么? 事实,java,design-patterns,visitor,Java,Design Patterns,Visitor,我有以下数据结构,包括一个表和一个属性列表(简化): 类表{ List可以很好地完成这项工作,但从另一方面看,对于这个简单的结构来说,这似乎有些过分 问题: 解决这个问题最优雅的方法是什么?我想到的是,或者是它的一个小变种 您有一组类,每个类都专用于对数据类执行特定的操作。您可以将这些类保存在hashmap或其他结构中,外部选择可以在其中选择一个来执行。要执行这些操作,请使用数据作为参数调用所选命令的execute()方法 编辑:精化 在底层,您需要对数据行的每个属性进行处理。 这听起来确实像

我有以下数据结构,包括一个表和一个属性列表(简化):

类表{
List可以很好地完成这项工作,但从另一方面看,对于这个简单的结构来说,这似乎有些过分

问题: 解决这个问题最优雅的方法是什么?

我想到的是,或者是它的一个小变种

您有一组类,每个类都专用于对数据类执行特定的操作。您可以将这些类保存在hashmap或其他结构中,外部选择可以在其中选择一个来执行。要执行这些操作,请使用数据作为参数调用所选命令的execute()方法


编辑:精化

在底层,您需要对数据行的每个属性进行处理。 这听起来确实像是访问者模式的一个例子:访问者模拟了一个双线程 分派操作,只要您能够组合变量“牺牲品”对象 使用封装在方法中的变量“操作”

您的属性都希望是xml-ed、text-ed、insert-ed-update和initialize-ed。 因此,您将得到一个由5 x 3个类组成的矩阵来执行这5个操作中的每一个 三种属性类型中的每一种。访问者模式的其余机制 将为您遍历属性列表并为应用正确的访问者 以正确的方式为每个属性选择的操作

写15个类加上接口听起来确实有点沉重。你可以这样做 并且有一个非常通用和灵活的解决方案。另一方面,在 如果你花了很多时间思考一个解决方案,你可以把代码拼凑起来 为了它目前已知的结构和交叉手指的形状 你的课程不会经常改变太多

我想到的命令模式是在各种类似的命令中进行选择 操作。如果要执行的操作是以字符串形式输入的,可能是以 脚本或配置文件等,然后可以从

"xml" -> XmlifierCommand
"text" -> TextPrinterCommand
"serial" -> SerializerCommand
…这些命令中的每一个都会激发相应的访问者来执行 但由于操作更可能是由代码决定的,因此 不需要这个。

我想到了它,或者是它的一个小变种

您有一组类,每个类都专用于对数据类执行特定的操作。您可以将这些类保存在hashmap或其他结构中,外部选择可以在其中选择一个来执行。要执行这些操作,请使用数据作为参数调用所选命令的execute()方法


编辑:精化

在底层,您需要对数据行的每个属性进行处理。 这听起来确实像是访问者模式的一个例子:访问者模拟了一个双线程 分派操作,只要您能够组合变量“牺牲品”对象 使用封装在方法中的变量“操作”

您的属性都希望是xml-ed、text-ed、insert-ed-update和initialize-ed。 因此,您将得到一个由5 x 3个类组成的矩阵来执行这5个操作中的每一个 三种属性类型中的每一种。访问者模式的其余机制 将为您遍历属性列表并为应用正确的访问者 以正确的方式为每个属性选择的操作

写15个类加上接口听起来确实有点沉重。你可以这样做 并且有一个非常通用和灵活的解决方案。另一方面,在 如果你花了很多时间思考一个解决方案,你可以把代码拼凑起来 为了它目前已知的结构和交叉手指的形状 你的课程不会经常改变太多

我想到的命令模式是在各种类似的命令中进行选择 操作。如果要执行的操作是以字符串形式输入的,可能是以 脚本或配置文件等,然后可以从

"xml" -> XmlifierCommand
"text" -> TextPrinterCommand
"serial" -> SerializerCommand
…这些命令中的每一个都会激发相应的访问者来执行 但由于操作更可能是由代码决定的,因此
不需要这个。

我会考虑使用和的组合

JAXB将允许您对XML进行marshall和unmarshall处理。默认情况下,属性转换为与属性同名的元素,但可以通过@XmlElement和@XmlAttribute注释进行控制


Hibernate(或JPA)是在数据库中来回移动数据对象的标准方法。

我将结合使用和

JAXB将允许您对XML进行marshall和unmarshall处理。默认情况下,属性转换为与属性同名的元素,但可以通过@XmlElement和@XmlAttribute注释进行控制


Hibernate(或JPA)是在数据库中来回移动数据对象的标准方法。

我不知道这些天你为什么要自己在数据库中存储数据,而不仅仅是使用Hibernate,但我的建议是:

longtribute
DateAttribute
StringAttribute
,…都有不同的内部结构(即属性类中不存在特定于它们的字段),因此您无法创建一个通用方法来序列化它们。现在,XML、SQL和纯文本在序列化它们时都有不同的属性。您真的无法避免编写O(#subassesof
Attribute
#outputformats)*不同的序列化方法

Visitor对于序列化来说不是一个坏模式。诚然,如果在非递归结构上使用,这有点过分,但是一个随机的程序员阅读你的代码会立即掌握它在做什么

现在,对于反序列化(从XML到对象,从SQL到对象),您需要一个工厂

还有一个提示,对于SQL更新,您可能希望使用对象的旧版本,即新版本