【发布时间】:2018-01-09 19:36:42
【问题描述】:
我经常使用 Ajax (Jquery) 发送表单以在 ColdFusion 中进行处理。我将表单发送到 CFC,它通过 Ajax 通知将结果和错误返回给用户。
表单可能非常大(想想带有额外输入的完整 HTML 页面)并且需要 CFC 中的大量逻辑才能正确处理,具体取决于表单中选择的选项。
因为 CFC 中的每个函数都可能很大(可能有 1200 行代码),所以我得到了可怕的“branch target offset too large for short”错误冷融合。为了解决这个问题,我将一些代码放入 .cfm 文件并使用<cfinclude> 将代码重新放入 cfc 中,这“解决”了问题,但在尝试组织所有小 sn-ps 以进行关联时,我感到很困惑使用特定的 CFC。这也可能是一种低效的工作方式。
我想知道其他 ColdFusion 用户如何使用 CFC 构建/处理处理表单,这些 CFC 在将表单数据导入数据库时会做很多额外的事情。
我想到的一些选项是:
- 为没有太多代码的创建、更新、读取和删除操作创建“shell”函数
- 在 shell 函数
cfinclude中,所有代码都通过来自许多其他 .cfm 文件的子函数进行 sn-ps,以将代码保持在最低限度 - 或调用其他执行子功能的 CFC,并将表单变量作为参数传递给它们
上面的选项最终会让我有这样的结构(我不喜欢):
Article.cfc (CreateArticle, EditArticle etc)
CreateArticle_InsertImage.cfc
CreateArticle_ProcessBodytext.cfc
CreateArticle_InsertUser.cfc
CreateArticle_CheckIfExistingArticle.cfc
EditArticle_UpdateImage.cfc
EditArticle_UpdateBodytext.cfc
EditArticle_CheckIfExistingArticle.cfc
我最终会为每个函数创建一个新的 CFC,而不是它们本身就是类/对象。它们可能是 CFM 文件(并使用 <cfinclude>,但这样做似乎很奇怪。有没有人知道的替代/更好/标准方式?
【问题讨论】:
-
您使用的是什么版本的 ColdFusion?也基于这篇文章:coldfusionmuse.com/index.cfm/2007/9/28/Branch.Target.Offset 你可能有太多的
ifs 或循环,Java 简直要疯了。 -
你在使用事务吗?我已经看到
cftransaction的长块创建了这个问题。 -
@JamesAMohler 使用 ColdFusion 2016 企业版。有很多 cfif 标签,但我无法进一步降低它们。我尝试减少它们,并删除
<cftransaction>标签,但它没有用。唯一的方法是将代码抽取到 .cfm 文件中,然后使用<cfinclude>在 CFC 中将它们重新组合在一起。这让我想到可能有更好的/模块化/oop 方式来做到这一点。 -
我不以这种方式使用 ajax 或 cfc。但是,通常被认为是一种良好的编程习惯的事情是函数应该只做一件事。如果你有超过 1000 行的函数,你可能没有遵循这种做法。
标签: ajax coldfusion coldfusion-2016