Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coldfusion 管理跨整个网站使用的数据库查询_Coldfusion_Coldfusion 10_Cfquery_Cfstoredproc - Fatal编程技术网

Coldfusion 管理跨整个网站使用的数据库查询

Coldfusion 管理跨整个网站使用的数据库查询,coldfusion,coldfusion-10,cfquery,cfstoredproc,Coldfusion,Coldfusion 10,Cfquery,Cfstoredproc,随着应用程序的发展,我注意到我正在跨多个网页重用大量数据库查询 目前,我使用的是一个.CFM文件,它有许多标记,包含在每个需要数据库数据的页面上。我所做的只是将这些存储过程执行包装在一个标记中,该标记测试调用页的名称,然后执行相应的代码块 我在任何方面都不是专家,但我觉得这不对。我只是不知道如何正确管理所有数据库查询,以便在整个网站的任何CFM页面上共享它们。例如,一个页面可能需要“GetUsers”存储过程,而另一个页面可能需要“GetOrders” 我正要着手创建一个CFC,它将每个单独的或

随着应用程序的发展,我注意到我正在跨多个网页重用大量数据库查询

目前,我使用的是一个.CFM文件,它有许多
标记,包含在每个需要数据库数据的页面上。我所做的只是将这些存储过程执行包装在一个
标记中,该标记测试调用页的名称,然后执行相应的
代码块

我在任何方面都不是专家,但我觉得这不对。我只是不知道如何正确管理所有数据库查询,以便在整个网站的任何CFM页面上共享它们。例如,一个页面可能需要“GetUsers”存储过程,而另一个页面可能需要“GetOrders”

我正要着手创建一个CFC,它将每个单独的
保存在自己的方法/功能中。例如:

<cfcomponent name="DBQueries" hint="Everything for DB retrieval">
 <cffunction name="GetUsers" returntype="query">
   <cfstoredproc procedure="GetUsers">
   <cfprocresult name="rsUsers">
   </cfstoredproc>
   <cfreturn rsUsers>
 </cffunction>
.....
 <cffunction name="DBQuery100">
   <cfstoredproc procedure="GetSomething" returntype="query">
   <cfprocresult name="rsSomething">
   </cfstoredproc>
   <cfreturn rsSomething>
 </cffunction>
</cfcomponent>

.....

然后在main.CFM页面上,我将调用返回数据所需的组件和方法。这是实现数据库查询管理的一种好方法吗?

与数据库相关的事实与代码重复的事实没有那么重要。在努力提高代码的可重用性方面,您走在了正确的轨道上

如果你把你的查询放到CFC中,你可能会考虑把这一步做得更远。使用Application.cfc的onApplicationStart方法创建一个应用程序变量,该变量可供所有页面上的所有用户使用,而不是一直调用它

另一种方法是将所有这些数据库标记放入.cfm文件中,并在Application.cfc的onRequestStart方法中放入cfinclude


两种方法都有效。而且,当您比较两件事时,几乎总是这样,每件事都比另一件事有优势。

与数据库相关的事实与代码重复的事实没有那么相关。在努力提高代码的可重用性方面,您走在了正确的轨道上

如果你把你的查询放到CFC中,你可能会考虑把这一步做得更远。使用Application.cfc的onApplicationStart方法创建一个应用程序变量,该变量可供所有页面上的所有用户使用,而不是一直调用它

另一种方法是将所有这些数据库标记放入.cfm文件中,并在Application.cfc的onRequestStart方法中放入cfinclude


两种方法都有效。而且,当你比较两件事时,几乎总是这样,每件事都比另一件事有优势。

考虑以下两个db表

使用者 用户标识主密钥 名字 姓氏

安全 SecurityID主密钥 用户ID外键 许可

所有数据库表都有创建、读取、更新和删除操作(CRUD)

积垢作业可能存在于多个地方

  • 标记的内部
  • 存储过程内部
  • 其他
  • 问题是,所有CRUD操作都以各自的方式组合在一起。考虑创建一个用户对象(<代码>用户.CFC< /代码>)。 在一天结束时,您可能会发现您需要的对象(
    *.cfc
    s)比表少得多

    好的,现在你有了
    user.cfc
    你用它做什么?它可以以各种不同的方式连接到应用程序的其余部分

    • application.User=新用户()
    • session.User=新用户()
    • request.User=新用户()
    每一个都与下一个非常不同。在我们走上合适的道路之前,我们必须考虑成员数据,以及我们想要它的时间。< /P>
    <cfcomponent>
       <cfset this.userid = ""><!--- This always points to the user I want to interact with --->
    
       <cffunction name="create"></cffunction>
       <cffunction name="read"></cffunction>
       <cffunction name="update"></cffunction>
       <cffunction name="delete"></cffunction>
     </cfcomponent> 
    
    
    
    您的CRUD操作很可能会在其所有操作中与相同的
    UserID
    交互。您可能会发现,更新记录后,您将经常阅读它。您可能只想设置一次,让所有函数只使用同一个函数,而不是总是说明您正在与哪个
    UserID
    进行交互

    好的,现在让我们回到您将使用它们的地方

    应用程序用户

    整个系统中只存在一个
    用户
    对象。它将在请求到达站点时创建。每个请求都将共享此对象。如果将
    user
    对象附加到此处,则表明所有请求都将关注同一用户

    会话。用户 对于外部世界中的给定最终用户,将存在一个
    User
    对象。它将与所有其他最终用户分开。这意味着每个最终用户都将关注自己的
    用户
    ,即使他们在网站上点击,他们仍然会关注相同的
    用户

    请求。用户 每个请求将存在一个
    用户
    对象。它将只存在于特定的请求中,然后被丢弃。这表明在这个请求中查看特定的
    用户
    是有意义的,但下一步可能会有很大的不同,甚至可能与用户无关

    ~~~~~~~~~~~~~~~


    在一天结束时,您需要决定如何捆绑您的DB交互,以及将这些捆绑的操作保持在一起多长时间

    使用者 用户标识主密钥 名字 姓氏

    安全 SecurityID主密钥 用户ID外键 许可

    所有数据库表都有创建、读取、更新和删除操作(CRUD)

    积垢作业可能存在于多个地方

  • 标记的内部
  • 存储过程内部
  • 其他
  • 问题是,所有CRUD操作都以各自的方式组合在一起。考虑创建一个用户对象(<代码>用户.CFC< /代码>)。 一天结束时,你可能会发现你需要的对象比ta少得多(
    *.cfc
    s)
    <cfcomponent>
       <cffunction name="create"></cffunction>
       <cffunction name="read" hint="Read will also read security info"></cffunction>
       <cffunction name="update" hint="Perhaps this can update security too"></cffunction>
       <cffunction name="delete" hint="Delete will also delete security info"></cffunction>
    
       <cffunction name="create_security"></cffunction>
       <cffunction name="read_secrity" hint="This may not even be needed"></cffunction>
       <cffunction name="update_security"></cffunction>       
       <cffunction name="delete_security" hint="This may not even be needed"></cffunction>
    </cfcomponent> 
    
    <cfcomponent>
       <cfset this.userid = ""><!--- This always points to the user I want to interact with --->
    
       <cffunction name="create"></cffunction>
       <cffunction name="read"></cffunction>
       <cffunction name="update"></cffunction>
       <cffunction name="delete"></cffunction>
     </cfcomponent> 
    
    <cfset users = new model.Users().getUsers() />
    
    users = new model.Users().getUsers();