前端控制器框架体系结构和服务

时间:2011-11-03 10:50:11

标签: frameworks coldfusion coldbox

我正在尝试在我自己的前端控制器样式框架中使用我的服务层,并且我总是被教导将服务层与控制器层分离。

这引起了我的问题,因为我需要从我的服务中访问重要的前端控制器方法,因此我正在努力实现这一目标。

我注意到在查看Coldbox时,实际框架会定期将Coldbox控制器传递给其服务。

可以而且应该这样做吗?

问题我特别指出我的控制器/处理程序调用一个服务,该服务为页面请求获取大量小部件,然后遍历每个小部件并呈现每个小部件,但每个小部件本身就是一个控制器/处理程序和控制器/ handler需要前端控制器。

如果不传入前端控制器或者我的架构是错误的,怎么办呢?

当前服务代码(缩短版)

<cffunction name="renderWidgets" access="public" output="false" returntype="string" hint="I return an the prequested webpage URL.">
<cfargument name="source" type="string" default="" />
<cfargument name="templateId" type="string" default="" />
<cfargument name="webPageId" type="string" default="" />
<!--- set original template HTML --->
<cfset stuReturn.renderedHTML = arguments.source />
<!--- get assigned widgets and properties --->
<cfset stuReturn.qryTemplateObjects = findTemplateObjectAssignments({templateId=arguments.templateID}) />
<!--- if found --->
<cfif stuReturn.qryTemplateObjects.recordcount>
    <!--- loop over assigned widgets --->
    <cfloop query="stuReturn.qryTemplateObjects">
        <!--- create struct  --->
        <cfset stuReturn.stuTemplateObjectAssignment = queryrowtostruct(stuReturn.qryTemplateObjects, stuReturn.qryTemplateObjects.currentrow) />
        <!--- get the widget object --->
        <cfset stuReturn.renderedHTML = stuReturn.renderedHTML & getFrontController().getWidget(stuReturn.stuTemplateObjectAssignment.objectId).render() /><!--- this is the problem, no access to getFrontController() --->
    </cfloop>
</cfif>
<!--- return rendered HTML --->
<cfreturn stuReturn.renderedHTML />

0 个答案:

没有答案