如何将DSN传递给cfcomponent数据源属性

use*_*775 1 coldfusion railo

将应用程序范围的DSN值传递给组件的最佳做法是什么?是这样的吗?

component datasource="#application.dsn#"
Run Code Online (Sandbox Code Playgroud)

我一直认为在组件中使用应用程序范围的变量不是一个好习惯.这会更好吗?

component{
    function init( dsn, arg1, arg2 ){
          this.datasource = arguments.dsn;
   }
}
Run Code Online (Sandbox Code Playgroud)

Car*_*ten 6

最佳实践是使组件完全隔离,不要了解外部世界(包括组件外部的任何变量,例如应用程序范围).您应该通过参数传递组件需要满足其预期目的的任何数据.因此,基于该前提,您的第二个代码示例是首选方法.

  • 设置默认数据源(在Application.cfc中)是您应该在任何不具有多个数据源的应用程序中执行的操作 - 显式传递它只是噪声. (3认同)
  • 硬编码的东西,比如`cfquery`标签中的数据源名称是一个糟糕的想法.就像Peter指出的那样,更好的方法是在Application.cfc中设置默认数据源. (2认同)