2010-07-07 146 views
1

我正在为特定的XML结构创建一个解析器,而且我正面临着一个可能的硬编码问题。这里:这是硬编码吗?我怎样才能避免它?

private function filterDefaultParams($param){ 
    #FIXME Hardcoding? 
    return array_key_exists('default',$param); 
} 

字面'默认'是Xml结构中的有效标记,这是硬编码吗?我可以使用其他技术来搜索默认标签吗?

我考虑过使用文档类型,但是,如何指定默认值为'default'?

也许不是硬编码,因为这个标签是我的标准。

谢谢你的帮助。

+0

“硬编码”不是固有的“坏”,而不是因为正确的理由而完成的,就像数据永远不会改变并且只用于一个地方一样。 – 2010-07-07 16:41:18

回答

1

它是否硬编码?是。

这就是说,你需要权衡一些因素。首先,考虑声明和跟踪各种常量所需的附加代码的“默认”属性名称的可能性。

要考虑的另一件事是一致性。如果你有其他地方的属性名称可能会改变,那么你会想要使用所有的常量。

在另一方面,使用?XML或“编码”一常数的时间,那些众所周知/定义良好的项目浪费......

ONT他其他另一方面,是可能性的错别字。当你使用一个常量时,你有编译时支持来确保你所说的任何地方“DEFAULTPROPERTY”在任何地方或任何地方都是正确的。而使用字符串处理方式意味着问题可能不会在运行时显示出来,或者直到它们发生在您的代码的一个小部分。

我想所有这一切都是围绕着说“使用常量”的方式。

+0

我一直在想'为XML使用常量...是浪费时间......'我同意你的观点,我发现了根本问题(当你写出熟悉的/定义好的)时,我的XML模式不是充分定义,这就是为什么我关心未来的问题。 我会为XML结构提出更强的设计并降低风险。谢谢。 – juanjosegzl 2010-07-07 17:23:29

5

我用我的程序做了很多XML解析,而我通常做的是创建一个包含标签名称的常量,并用它来代替。这样,如果XML标签发生变化,您只需在一个地方而不是在代码中的任何地方更改您的字符串。

+0

-1如果XML语法发生变化,那么您将不得不对一个字符串进行更改。 – 2010-07-07 16:45:26

+0

通过语法,你指的是结构?当然,这会涉及更多的工作而不是更改字符串。我只提到要更改的标签名称。如果这个xml文档是由其他人生成的,他们决定更改一个特定的标签名称,那么常量就派上用场了,因为您只需要在一个地方更改字符串值,而不是遍布整个代码。 – 2010-07-07 16:53:18

+0

我发现问题是不够好的设计。阅读我对答案的评论。 – juanjosegzl 2010-07-07 17:24:10