Как аккуратно добавить ведение журнала с данными сеанса в приложении MVC CF? - PullRequest
1 голос
/ 07 апреля 2011

Сначала я думал о создании подклассов Services и добавлял журналы вызовов вокруг него, но потом не было способа передать «текущего зарегистрированного пользователя» на уровень сервиса с помощью параметра без изменения большого количества кода. Доступ к сессии напрямую? Не кажется правильным. Фасад сессии?

Ведение журнала на уровне контроллера будет проще. У меня нет проблем с прямым доступом к сеансу, но он не будет регистрировать, если служба вызывается из других источников (например, Ajax? Flex?), Кроме приложения MVC.

АОП? Не уверен, как это поможет, но если это так, то просвещай меня.

Мысль? Спасибо.

1 Ответ

1 голос
/ 07 апреля 2011

В руководстве по быстрому запуску ColdSpring приведен пример реализации функции ведения журнала с использованием функции AOP ColdSpring. Ведение журнала является отличным примером хорошего использования AOP.

Что касается взаимодействия с областью сеанса, я использую Session Facade . Это будет работать с любой областью применения.

<cfcomponent output="false">

<cfset variables.instance = {} />
<cfset variables.instance.scopename = '' />
<cfset variables.instance.scope = '' />

<cffunction name="init" returntype="scopeFacade" output="false" access="public">
    <cfargument name="scope" required="true" type="variablename" />
    <cfset variables.instance.scopename = arguments.scope />
    <cfreturn this />
</cffunction>

<cffunction name="getscope" returntype="struct" output="false" access="private">
    <cfreturn structGet(variables.instance.scopename) />
</cffunction>

<cffunction name="get" returntype="any" output="false" access="public">
    <cfargument name="key" required="true" type="string" />
    <cfargument name="default" required="false" type="string" />
    <cfset var scope = getscope() />
    <cfif structKeyExists(arguments,"default") and not structKeyExists(scope,arguments.key)>
        <cfreturn arguments.default />
    </cfif>
    <cfreturn scope[arguments.key] />
</cffunction>

<cffunction name="set" returntype="void" output="false" access="public">
    <cfargument name="key" required="true" type="string" />
    <cfargument name="value" required="true" type="any" />
    <cfset var scope = getscope() />
    <cfset scope[arguments.key] = arguments.value />
</cffunction>

<cffunction name="delete" returntype="void" output="false" access="public">
    <cfargument name="key" required="true" type="string" />
    <cfset var scope = getscope() />
    <cfif exists(arguments.key)>
        <cfset structDelete(scope,arguments.key) />
    </cfif>
</cffunction>

<cffunction name="exists" returntype="boolean" output="false" access="public">
    <cfargument name="key" required="true" type="string" />
    <cfreturn structKeyExists(getScope(),arguments.key) />
</cffunction>

</cfcomponent>
...