Область атрибутов против структуры атрибутов

У пользовательских тегов есть область атрибутов. Здорово.

Я также видел некоторые другие приложения (и, возможно, ColdBox?), Где разработчик помещал все в структуру атрибутов. Например в login.cfm:

<cfparam name="attributes.username" default="some value">

Есть ли смысл в этом, кроме необходимости указать attributes.foo Я признаю, что это улучшает читабельность, но зачем повторно использовать полное имя?

Это личное предпочтение или я упускаю что-то глубокое в области атрибутов?

2 ответа

Решение

В этом нет ничего глубокого. Многим фреймворкам (и отдельным разработчикам) нравится объединять области формы и URL-адреса в один объект "событие" или что-то (например, ваш "атрибут"), но на самом деле это вам не особо выгодно.

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

Вы всегда можете ссылаться на объект через variables.attributes.foo для ясности, но это боль и немного уродливо. И, конечно, ничто не мешает вам получить доступ к области действия атрибутов (приоритет области будет проверять атрибуты перед переменными. Атрибуты), но человек, который должен читать код после вас, будет более запутан. По сути, это создало проблему, а не ее решение.

В Fusebox идея заключалась в том, что отдельный файл можно использовать как часть фреймворка или как часть cfmodule. Внутри corefiles/application.cfc находится:

...
<cfparam name="variables.attributes" default="#structNew()#" />
<cfif isDefined("URL")>
    <cfset structAppend(attributes,URL,true) />
</cfif>
<cfif isDefined("form")>
    <cfset structAppend(attributes,form,true) />
</cfif>
...

Смотрите GitHub для деталей

Другие вопросы по тегам