Я хотел бы написать код проверки на стороне сервера для проверки всех пользовательских данных на моей странице. Я хотел бы сохранить все эти проверки на стороне сервера с уровня представления. Теперь я изучаю создание компонента и храню в нем все функции проверки. Я буду использовать тег <cfinvoke>
для доступа к методам проверки на моей пользовательской странице. Но проблема в том, что мне нужно применить проверку примерно к 50 пользовательским вводам и использовать тег <cfinvoke>
50 раз. Может ли кто-нибудь сказать мне, что многократное использование <cfinvoke>
повлияет на производительность, или есть ли другой лучший подход, который я могу использовать?
Использование ‹cfinvoke› в ColdFusion
Ответы (1)
Нет заметных накладных расходов при использовании <cfinvoke>
. Но я бы все же рекомендовал вам избегать его здесь. Вместо этого рассмотрите это (пример):
Валидатор.cfc
<cfcomponent>
<cffunction name="validateX" access="public" ...>
...
</cffunction>
<cffunction name="validateY" access="public" ...>
...
</cffunction>
<cffunction name="validateZ" access="public" ...>
...
</cffunction>
</cfcomponent>
контроллер.cfm
<cfset validator = new Validator()>
<cfset validator.validateX(...)>
<cfset validator.validateY(...)>
<cfset validator.validateZ(...)>
...
Теперь вы можете легко работать с результатом проверки.
Если вы вернете логическое значение:
<cfif validator.validateX(...)>
...
<cfelse>
...
</cfif>
Если вы возвращаете массив с ошибками:
<cfset errors = []>
<cfset errors.addAll( validator.validateX(...) )>
<cfset errors.addAll( validator.validateY(...) )>
<cfset errors.addAll( validator.validateZ(...) )>
и т.п.
<cfinvoke>
создает экземпляр класса (new Validator()
) и таким же образом вызывает метод validateX(...)
. Основное отличие состоит в том, что экземпляр создается каждые <cfinvoke>
заново, и возвращаемое значение должно указываться как входная переменная (returnVariable
), что в большинстве случаев громоздко.
person
Alex
schedule
29.10.2017
Спасибо, Алекс. Можете ли вы объяснить разницу между использованием ‹cfinvoke› и вашим способом? Я новичок в Холодном синтезе. Ваш способ кажется более читабельным.
- person kamil hussain; 29.10.2017
Да, оператор
new
был недавно введен в CF9. Я добавил объяснение к моему ответу внизу относительно различных подходов.
- person Alex; 29.10.2017
Спасибо Алекс за помощь.
- person kamil hussain; 29.10.2017
Еще одно замечание:
New
вызовет функцию init()
вашего метода. Конечно, вы также можете использовать createObject()
или cfobject
, но чаще всего я выбираю New
.
- person Shawn; 30.10.2017