解析文件以设置对象的数据 - 一个设计问题

时间:2008-12-23 12:37:50

标签: vb.net oop parsing

我最近不得不编写一些解析文件的代码来设置对象中的数据。由于这里涉及多个对象和相应的文件,我决定将解析代码分开。

所以我有一个用于解析文件的类CommandFileParser,每个文件/对象类型有两个类:一个用于实际对象本身,另一个用于可能用于设置数据的命令物体。例如VectorDrawingVectorDrawingCommands。后者的方法将由CommandFileParser使用反射调用,因为它在输入文件中找到它们,并将数据应用于前者。

但对我而言,这似乎是一种非常混乱的方式。我最终在所有dataobject.value = value类中重复了大量的样板代码,例如-Commands。我不喜欢每个主数据类都有一个辅助类来设置数据。

任何人都可以提出更清洁,更恰当的OO方法吗?

5 个答案:

答案 0 :(得分:1)

“我最终重复了大量的样板代码,如dataobject.value = value。”

赋值语句不是真正的“样板”。这是你最重要的陈述;事实上有许多意味着你做了很多重要的事情。

然而,其他“样板”可能是任何东西。您能举例说明您反对的具体样板吗?

答案 1 :(得分:0)

如果您的所有命令都涉及直接分配,那么您可能不需要命令对象。你能直接对对象本身进行反射并完全摆脱命令对象吗?

另一种可能性是你有两类命令:一类是由对象直接实现的,例如,简单的属性设置,另一类是由外部命令对象实现的,例如,对于需要进行计算或设置的命令多个属性。您可以像以前一样进行反射,但只需检查两个对象。

顺便说一句,我喜欢用反射来寻找命令的想法。这使得添加新命令非常容易。

答案 2 :(得分:0)

我不知道VB.Net,但是在我熟悉的所有OO语言中,通常的方法是让一个可变对象包含设置自己的属性值的方法,而不是让它工作进入第二堂课。

您是否有理由不直接将当前VectorDrawingCommands课程中的方法放在VectorDrawing中,并完全取消VectorDrawingCommands

答案 3 :(得分:0)

也许您希望每个Class继承CommandFileParser而不是将其分离出来。

答案 4 :(得分:0)

为什么不能直接使用反射来设置字段或属性的值并删除 -Commands 类的整个概念?