在ColdFusion中哪种方式更好地创建组件对象CreateObject()或EntityNew()或New关键字

时间:2014-12-16 21:30:27

标签: orm coldfusion createobject

我在使用CFC组件时在ColdFusion中编写了一些代码,当我对使用不同方法创建组件对象感到困惑时。 如果有人请让我知道创建对象的哪种方法更好,我将不胜感激。 CreateObject()EntityNew()& New个关键字。 我阅读了几篇博客并得到了不同的答案,有些人表示,与Create Object相比,Entity New更快。 我还发现EntityNew()中的句法差异更好。 如果我能从任何人那里得到一些想法,我将不胜感激。 感谢。

3 个答案:

答案 0 :(得分:5)

原始版本,在此问题结束时撰写:http://blog.adamcameron.me/2014/12/fucking-stackoverflow-and-new-vs.html

文稿: 这是一个非常模糊的问题,一旦发布,我将投票决定关闭它。

除非有人能够使用新的createObject()<cfobject><cfinvoke>来提出真实的性能惩罚,否则我不会费心去听他们。不会有任何有意义的差异。他们居住在微观(和过早〜)优化的领域。

我在上面列出的所有选项与entityNew()略有不同,<cfobject>专门用于创建基于ORM的对象。其他更通用。但是,再次,在性能方面,这里将没有现实世界的考虑。

我可以避免使用标签。因此,考虑IMO可以将<cfinvoke>entityNew()折扣。

所有这些都是意见。

正如我所说,createObject()是专为创建ORM对象而设计的,因此在混合使用基于ORM和vanilla对象的混合环境中可能会有一些东西可以说。

至于createObject()和新的?我现在为Java对象保留{{1}},并为CFML对象使用new。代码清晰度。

还要记住new也调用了init()方法(或者应该调用组件上建议的initmethod属性)。

答案 1 :(得分:1)

您的开发团队的标准是什么?

这几乎是你需要回答的唯一问题。 “X比Y快”可以根据平台和服务器资源进行更改。对于其他人而言,更快的速度对你来说可能不会更快。如果您想使用新语法,那么请将其作为标准。您不必重构createObject()的现有实例,至少不是立即重构,但您应该标准化每个人将来会使用的内容。

答案 2 :(得分:0)

如果对象未启用ORM(即没有persistent=true),请使用new运算符。它很干净,可读性很高。

即使我用CFML写作,我也更喜欢<cfset foo = new X()>而不是<cfobject>。我只会在我需要调用动态方法时使用<cfinvoke>,当时Evaluate()是唯一选项,但CF10 +有invoke()而我不再使用<cfinvoke>,请参阅:https://wikidocs.adobe.com/wiki/display/coldfusionen/Invoke

如果对象有persistent=true,那么我可以选择entityNew()因为我在CF9期间学到的东西:https://stackoverflow.com/a/1349161/35634当我需要时它应该更有效率以后实体()实现它。