Архитектура и сервисы Front-Controller Framework - PullRequest
1 голос
/ 03 ноября 2011

Я пытаюсь использовать свой сервисный уровень в моей собственной структуре стиля фронт-контроллера, и меня всегда учили отделять сервисный уровень от уровня контроллера.

Это вызывает у меня проблемы по мере необходимостичтобы получить доступ к важным методам фронт-контроллера из моих сервисов, так что я прыгаю через обручи, чтобы попытаться сделать это.

Я заметил, глядя на Coldbox, однако фактическая среда регулярно пропускает контроллер Coldbox через егоservices.

Можно и нужно ли это на самом деле сделать?

Проблема, с которой я столкнулся, заключается в том, что мой контроллер / обработчик вызывает службу, которая получает загрузку виджетов для запроса страницы, а затем зацикливаетсякаждый из них и отображает каждый виджет, но каждый виджет сам является контроллером / обработчиком, а контроллеру / обработчику нужен фронт-контроллер.

Как это можно сделать, не передавая фронт-контроллер, или моя архитектура полностьюнеправильно?

ТЕКУЩИЙ КОД ОБСЛУЖИВАНИЯ (сокращенный)

<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 />

...