即使你的對象只有在請求級別得到初始化,現在看來似乎應該是更小的痛苦以這種方式一起工作的。
<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>
如果它是安全的,在應用級(這裏假設爲對象的數據源不會在運行時更改爲存在於您的數據對象和您編寫線程安全的氟氯化碳)你可以存儲和初始化應用程序級別的DAO,然後每個請求具有非常簡單的代碼,如:
<cfscript>
request.someQuery = application.randomDAO.someGetter();
request.someOtherQuery = application.randomDAO.someOtherGetter();
request.aThirdQuery = application.randomDAO.aThirdGetter();
</cfscript>
那麼,是什麼cfquery標籤的樣子,從兩個中的CFC ption? – 2010-11-07 18:20:31
噢,這裏的想法是應用根據登錄的用戶訪問不同的數據源,所以我需要能夠根據查詢結果或會話變量動態設置數據源。在任何給定請求中使用兩個數據源,一個是認證數據源,另一個是基於認證結果設置的。 – 2010-11-07 18:26:13
你的服務層應該處理邏輯,並且可能調用你的DAO層,通過參數範圍傳入的數據源變量?將您的2個數據源緩存在服務層的變量作用域中,由您的Dependancy Injection框架注入? – Henry 2010-11-08 02:28:45