我正在重新组织我的ColdFusion目录结构,并对有经验的CF开发人员如何组织较小的cffunction库感到好奇.
我并不像精心设计的组件(对象)一样好奇,因为我是关于我们随着时间的推移建立的许多小实用功能.
你是否使用带有cffunctions的大型单个文件并将其包含在内?
您是使用大型单个文件作为cfcomponent并调用creatobject/cfinvoke吗?
你是否将每个实用程序功能放在自己的cfc中并调用createobject/cfinvoke?
你使用cfimport taglib语法吗?
你使用CustomTags还是cfmodule?
你有更好的方法吗?
由于我不喜欢详细的语法,所以我只是将包含一堆常见cffunction的lib.cfm包含在内.我可以将它们重构为cfcs,我可以创建对象,以便在变量范围上有更好的隔离.
有一个更好的方法吗?
这是我在2007年6月13日回复的一篇博客文章的转载.我已经使用这种方法很长一段时间了,效果很好!因人而异.
谁不喜欢用户定义的函数(UDF)?如果您已经完成了任何编程,那么您可能已经广泛使用它们.人们对他们的最大问题是如何在您的应用程序中包含和组织它们.
我发现大多数人都会创建一个Utils.cfc或UDFs.cfc,并将他们想要使用的UDF剪切并粘贴到组件中,如下所示:
一旦将所有应用程序将使用的UDF粘贴到组件中,您将需要使UDF可用于您的应用程序.我见过的几乎所有人都将组件加载到应用程序范围中.onApplicationStart()
如果您正在使用Application.cfc,或者只是将其添加到Application.cfm中,如果您正在使用它,则会放入以下行:
无论您使用的是Application.cfc还是Application.cfm,结果都是一样的; 您的所有UDF都可用于您的应用程序,您可以在整个过程中自由使用它们.唯一的区别是您使用的变量名称.我使用application.functions,有些使用application.utils或application.udfs; 无所谓,结果是一样的.
我用这种方法有一个问题,它很麻烦,UDF组件会变得很大.拥有如此巨大的组件文件的问题是编辑它变成了一场噩梦,因为滚动数千行代码并不是很有趣,而且我也注意到CFEclipse陷入了巨大的文件.确实代码崩溃确实提供了一些缓解,但必须有一个更好的方法.
我想要的是为我正在使用的每个UDF提供一个文件,以及我的应用程序自动加载它们的方法.这背后的原因是,如果我需要编辑myUDF1
,我可以打开文件myUDF1.cfm
并编辑我需要的内容.我还希望能够从CFLib.org获取UDF ,只需将它们放入我的应用程序中,而无需编辑任何内容.如果我需要从我的应用程序中删除UDF,那么就像删除UDF文件并重新初始化我的应用程序一样简单.
为了实现我想要的,我将UDFs.cfc修改为11行代码:
到底是怎么回事?
In a nutshell, here's what’s happening: I have a directory called udfs
in the same directory that I have my UDFs.cfc. This is the directory that I put all of my UDF CFM files. What the UDFs.cfc does is scan this directory when it is called and automatically includes each CFM file it finds. Thus it automatically loads any UDFs in the UDFs folder into itself (commonly called a "mixin").
所以达到了我的目标!我有自己的文件中的每个UDF,所以我不必滚动浏览一个巨大的组件文件来找到它.我现在可以轻松打开和编辑它.只需查看目录,我就知道我的应用程序正在使用哪些UDF.我只需将浏览器中的文本保存到目录中的文件中,即可自动从CFLib.org添加UDF.此外,如果我不再需要在我的应用程序中使用UDF,我只需从目录中删除该文件,并在下次重新初始化时将其从我的应用程序中删除.所有这一切都是在不必触及主UDFs.cfc文件的情况下完成的.
下面是一个UDF CFM文件的示例.该文件被调用fullLeft.cfm
并驻留在UDFs目录中.