2010-04-27 76 views
0

我的工作,可以从CMS内容导出到,然后还可以以更新内容被重新导入CMS中的XML结构的导入/导出程序。清理程序导入/导出程序

昨天,我想出了一个原型一些探索性的编码。功能在那里,程序按预期工作。但功能基本上由3个方法组成(一个主要,一个递归用于导入,一个递归用于导出),每个方法跨越300行。该代码由一些嵌套的foreachwhileif组成,并且程序性如此。

虽然它有效,但我有点担心程序的最终版本看起来更丑陋,因为特别是在导入方法中,为了将XML结构转换回数据库内容,需要使用许多特殊情况。

我在想如何OOP可以来帮助这里。目前我的方法是生成一个类似于DB行结构的树,并将其序列化为XML,并在导入时再次将XML序列化为基于数组的树结构。

它会更好,以封装的行为来创建对象的树?实际上,我发现使用数组结构非常方便,因为PHP在处理数组和序列化/反序列化方面很强大,非常容易。也许一种函数式编程风格的方法更适合于在OOP中强制执行......添加一个可以从和转换为对象的复杂Serializer似乎更加膨胀。

我知道,没有绝对的答案,你如何才能办理进口/出口等特殊情况,而无需创建两个巨大的方法,基本上做的一切结构像我这样的脚本,我会感兴趣的内容。

+0

你看了SimpleXML的http://ca.php.net/simplexml和的DomDocument http://ca.php.net/DomDocument类? – dnagirl 2010-04-27 12:30:47

+0

@dnagirl:是的,我知道这些。但序列化本身不是我困扰的问题。它更多关于创建要序列化的数据的代码结构。例如,在导入时我加载XML,将其转换为数组树。然后我迭代该数组树,处理一些特殊情况并将内容重新插入数据库中。 – Max 2010-04-27 12:33:08

+0

请参阅我将加载XML,并使用XSLT将其转换为我想要的。 PHP然后变得非常普遍和短。它需要确定的是要使用哪个XSLT。 – dnagirl 2010-04-27 12:35:21

回答

1

的问题是,阵列不支持隐式元数据 - 你已经得到了在类型的差异(原子和聚集实体之间 - 尽管这可以使用数组来描述一个分离 - )。

这里最重要的问题是您可以生成的代码的质量取决于您的技能和经验 - 如果是我,我可能会选择OO方法来获得更干净的代码 - 但如果您不熟悉通过面向对象编程,您可以在两个方面展开争夺 - 问题领域和编程方法。话虽如此,学习新的编程方式总是一个好主意 - 即使您再也不会写OO代码,它会改进您的程序编码。

如果你决定要搏一搏,那么最简单的出发点是为了定义每个XML标签然后建立围绕验证的对象。

HTH

C.

+0

还有一些很好的面向对象的设计模式,你可以探索帮助那些经常导致if..else语句和循环的扭曲嵌套集的模式和组合模式,比如Visitor真的可以清理这样的代码,虽然我看不到你的具体代码。 – d11wtq 2010-04-27 14:32:39