1

私は独自のフロント コントローラー スタイルのフレームワークでサービス レイヤーを使用しようとしていますが、サービス レイヤーをコントローラー レイヤーから分離するように常に教えられてきました。

サービスから重要なフロントコントローラーメソッドにアクセスする必要があるため、これが問題を引き起こしているため、これを実現するためにフープをジャンプしています。

Coldbox を見ていると、実際のフレームワークが定期的に Coldbox コントローラーをそのサービスに渡していることに気付きました。

これは本当にできるのか、またそうすべきなのか?

私が特に抱えている問題は、コントローラー/ハンドラーがページ要求のウィジェットのロードを取得するサービスを呼び出し、それぞれをループして各ウィジェットをレンダリングしますが、各ウィジェット自体がコントローラー/ハンドラーであり、コントローラー/ハンドラーが必要とすることですフロントコントローラー。

フロントコントローラーを渡さずにこれを行うにはどうすればよいですか、それとも私のアーキテクチャはすべて間違っていますか?

現在のサービスコード(短縮)

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

4

0 に答える 0