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(#subassesofAttribute
#outputformats)*不同的序列化方法
Visitor对于序列化来说不是一个坏模式。诚然,如果在非递归结构上使用,这有点过分,但是一个随机的程序员阅读你的代码会立即掌握它在做什么
现在,对于反序列化(从XML到对象,从SQL到对象),您需要一个工厂
还有一个提示,对于SQL更新,您可能希望使用对象的旧版本,即新版本