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