【问题标题】:shorten coldfusion namespaces for components缩短组件的冷融合命名空间
【发布时间】:2011-07-26 18:13:38
【问题描述】:

我正在用coldfusion 制作一个面向对象的应用程序,所以我真的分解了代码。所以,我的组件有很长的命名空间;例如:

folder1.folder2.plugin1.datatypes.Object

我似乎在重复很多东西,但与此同时,其中一些东西就像“模块”一样。我的意思是,由于没有更好的术语,示例中的“folder2”确实包含“独立”组件/应用程序(将它们视为插件)。所以,除了他们调用其他插件的资源外,他们自己行动。但是,由于文件夹结构,我仍然必须将它们全部称为 folder1.folder2.... 等等。

所以,让我们假设“folder1.folder2”。可以随心所欲地改变。 (这不会发生,但由于“plugin1”将定义一个独立的组件,它不关心“folder1”或“folder2”包含什么,如果它们甚至存在的话)。

当我在插件中编写代码时,是否可以缩短命名空间字符串;是否有“相对”命名空间之类的东西,就像使用相对 href 链接一样?

这样的事情会节省我很多时间,但也有助于确保这些东西更加独立,因为它们不会被绑定到它们的封装文件夹结构......

【问题讨论】:

    标签: oop coldfusion namespaces components


    【解决方案1】:

    您可以使用 ColdFusion 映射,特别是 Application.cfc 中的每个应用程序映射。

    您在 Application.cfc 中执行此操作

    <cfset this.mappings["/com"] = expandPath("folder1/folder2/plugin1") />
    

    您可以通过执行 com.datatypes.object 来引用组件。

    不记得每个应用的映射是什么时候出现的,但它已经存在了几个版本。

    【讨论】:

    • CF8 我相信,当每个应用程序映射出来时。
    • 另外,expandPath() 中的文本会根据文件实际所在的位置而改变。
    • 虽然这非常有用(因为只有一个地方有“folder1/folder2/...”映射),但仍然需要在某处硬编码这条路径。
    • 您可以在插件文件夹中添加一个 Application.cfc 文件并使用: this.mappings["/com"] = expandPath("./") 当然,您有必须这样做的问题'include' 主要的Application.cfc,以前做过,不容易,也不是特别难。
    【解决方案2】:

    听起来您可能需要考虑依赖注入,例如 WireBox。这将允许您拥有一个包含完整路径的配置文件,并允许您使用别名来获取您的模型。事实上,您甚至可以拥有线盒扫描位置,这样您就不必列出您创建的每个对象。

    WireBox 是从令人惊叹的 ColdBox 框架中提取的。它可以独立于 ColdBox 框架使用,并且应该很容易引入到您的应用程序中。

    有一个有用的 Google Group 用于 ColdOx(和相关的盒子)、录制的 ColdBox 连接会议以及可用于 WireBox 的其他类型的培训。

    我无法想象在没有依赖注入的情况下构建复杂的 OO。非常值得努力学习和实施。

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多