3

状況依存のデータソースを使用するアプリケーションがあります。現在、データソース情報をそのような形式で保存しています

reqeust.DB.Datasource = "DatasourceName";
request.DB.Username = "DatasourceUsername"
request.DB.Password = "DatasourcePassword"

次に、コンテキストに応じて変数を上書きするため、各 cfquery タグには属性 datasource="#request.DB.Datesource#" ... など ... が含まれます。

Coldbox のような CFC 中心のフレームワークへの移行を開始したいのですが、これがどのように機能するかわかりません。

データソース オブジェクトを CFC の init ステートメントに渡す必要がありますか? これは超ピタになりそうです。

4

2 に答える 2

3

CF9 では、Application.cfc 内の this.datasource をデフォルトのデータソースとして使用できます。残念ながら、ユーザー名/パスワードを設定する方法はないようです

また

A.) ColdSpring (シングルトン サービスにのみ適しています)、Lightwire、Coldbox 独自の DI ソリューション (Wirebox) などの依存性注入フレームワークを使用します。initコンストラクターまたはセッターを介してデータソース/ユーザー名/パスワードを挿入します。

B.) で設定<Datasources>Coldbox.xml.cfm参照: http://wiki.coldbox.org/wiki/ConfigurationFile.cfm

<!--Datasource Setup, you can then retreive a datasourceBean
   via the getDatasource("name") method: -->
<Datasources>
  <Datasource alias="MyDSNAlias" 
                  name="real_dsn_name" 
                  dbtype="mysql" 
                  username=""
                  password="" />
</Datasources>
于 2010-11-07T07:07:00.560 に答える
0

オブジェクトがリクエスト レベルでのみ初期化される場合でも、この方法で作業するのはそれほど苦痛ではないように思われます。

<cfscript>
request.DB.Datasource = "DatasourceName";
request.DB.Username = "DatasourceUsername";
request.DB.Password = "DatasourcePassword";

request.randomDAO = createObject('component','DAOStuff.randomDAO');
request.randomDAO.init(DBObject = request.DB);

request.someQuery = request.randomDAO.someGetter();
request.someOtherQuery = request.randomDAO.someOtherGetter();
request.aThirdQuery = request.randomDAO.aThirdGetter();
</cfscript>

とは対照的に:

<cfscript>
request.DB.Datasource = "DatasourceName";
request.DB.Username = "DatasourceUsername";
request.DB.Password = "DatasourcePassword";
</cfscript>

<cfquery name="request.someQuery" 
    datasource=request.DB.Datasource 
    username=request.DB.Username 
    password=request.DB.Password>
    --SOME SQL HERE
</cfquery>

<cfquery name="request.someOtherQuery" 
    datasource=request.DB.Datasource 
    username=request.DB.Username 
    password=request.DB.Password>
    --SOME SQL HERE
</cfquery>

<cfquery name="request.aThirdQuery" 
    datasource=request.DB.Datasource 
    username=request.DB.Username 
    password=request.DB.Password>
    --SOME SQL HERE
</cfquery>

データ オブジェクトがアプリケーション レベルで安全に存在する場合 (オブジェクトのデータ ソースが実行時に変更されず、スレッド セーフな CFC を記述していると仮定します)、DAO をアプリケーション レベルで格納および初期化できます。そして、各リクエストには次のような驚くほど単純なコードがあります。

<cfscript>
request.someQuery = application.randomDAO.someGetter();
request.someOtherQuery = application.randomDAO.someOtherGetter();
request.aThirdQuery = application.randomDAO.aThirdGetter();
</cfscript>
于 2010-11-07T16:25:33.133 に答える