Orm 跨应用程序重新使用ColdFusion表单实体/对象?
是否可以跨应用程序重用ColdFusion Form对象 例如,我在名为app1的文件夹中设置了一个名为app1的启用ORM的应用程序。我创建了一个department.cfc,它对应于department数据库表:Orm 跨应用程序重新使用ColdFusion表单实体/对象?,orm,coldfusion,coldfusion-9,Orm,Coldfusion,Coldfusion 9,是否可以跨应用程序重用ColdFusion Form对象 例如,我在名为app1的文件夹中设置了一个名为app1的启用ORM的应用程序。我创建了一个department.cfc,它对应于department数据库表: <cfcomponent> <cfset this.name = "app1"> <cfset this.ormenabled = "true"> <cfset this.ormSettings = { datasource =
<cfcomponent>
<cfset this.name = "app1">
<cfset this.ormenabled = "true">
<cfset this.ormSettings = {
datasource = "myDS",
schema = "mySchema",
dialect = "Oracle10g",
logSQL = "false"
}>
我可以从CFM文件加载和转储内容:
<cfset item = EntityLoad("department")>
<cfdump var="#item#">
然后,我在一个名为app2的文件夹中设置了一个相同的启用ORM的应用程序app2。我在那里创建了department.cfc,它扩展了app1中的department.cfc:
<cfcomponent persistent="true" extends="my.path.app1.department">
</cfcomponent>
当我尝试加载和转储内容时,出现错误:
系统试图使用未定义的值,该值通常表示代码或某些系统代码中存在编程错误。
空指针是未定义值的另一个名称
我已验证路径是否正确。例如,我能够使用CreateObject实例化对象:
<cfset item = CreateObject("component","my.path.app1.department")>
<cfdump var = "#item#">
我希望我可以引用单个CFC并重新使用该对象,但除非我遗漏了某些内容,否则可能需要在app2中重新创建该对象。CFC(实体)可以在两个不同的应用程序中实例化,每个应用程序都使用自己的ORM。您所需要做的就是将它们放在服务器上的这个中心位置,也许还可以创建一个特定于应用程序的/全局文件映射,然后您就可以创建新实例了。但是,最方便的方法是通过application.cfc中的“this.ormSettings”变量,因为您可以在一个地方完成所有操作
例如:
component displayname="Application"
{
this.ormSettings = {
cfclocation = [
"/full/path/to/cfc/directory",
"Entity",
"/a/relative/path"
]
};
this.mappings["/Entity"] = "full/dir/path/to/another/cfc/directory/called/whatever";
}
这些位置中的每一个都将在任何其他目录之前搜索匹配的CFC,因此明确定义它们也有潜在的性能优势。正如AlexP所说,通过映射访问它们,您当然可以让多个应用程序使用相同的“模型”或ORM实体CFC集 但是继承在ORM中的工作方式有点不同。一个持久性CFC不能扩展另一个持久性CFC(至少不在CF9中)。相反,必须将父CFC标记为“mappedsuperclass”,并将持久性属性设置为false或remove。然后,子持久性CFC应能够扩展它:
<cfcomponent name="Pet" mappedSuperClass="true" persistent="false">
...
</cfcomponent>
<cfcomponent name="Cat" extends="Pet" persistent="true" table="cats">
...
</cfcomponent>
...
...
这显然限制了在ORM中使用继承所能做的事情。您不能将Pet单独用作实体,但它有助于共享在您的猫、狗和兔子实体中复制的属性。您是尝试获取相同的实例还是仅实例化相同的cfc?在这两种情况下,如果不在两个应用程序中定义实体的元数据,则无法从ORM角度在单独的应用程序中重用同一实体。您可以使用一个库来实现这一点,并扩展application.cfc,同时使用相同的数据源/实体映射等。我正在尝试实例化相同的cfc,因为我认为使用相同代码的多个cfc是多余的。我喜欢你关于ORM库应用程序的想法——我会尝试一下。谢谢Alex——这正是我想要的!