У меня есть служба модели инфраструктуры CFML ColdBox, которая должна создавать ссылки. Однако у моделей нет доступа к фреймворку SuperType, поэтому у них нет доступа к event.buildLink()
.
Как предоставить сервисам в моей модели возможность создавать ссылки? Есть ли способ сделать функциональность buildLink()
доступной через какую-то инъекцию зависимостей?
Пример службы модели:
component
singleton
{
function getLinkToUser( required numeric userId ) {
return event.buildLink( "users.#arguments.usersId#" );
}
}
--Обновлять--
Многие комментарии предполагают, что встраивание функциональности фреймворка в модель может быть ошибкой и что buildLink()
действительно следует использовать только в представлениях. По большей части я согласен и считаю, что введение фреймворков в модель нарушает инкапсуляцию и проблемы.
При этом давайте расширим приведенный выше пример кода до более реальной ситуации: допустим, у вас есть модель службы, которая генерирует электронные письма для клиентов, и содержание этих электронных писем во многом определяется сложными бизнес-правилами. В этом случае я мог видеть аргумент в пользу создания контента электронной почты в модели, потому что именно там живут бизнес-правила.
Если вы вместо этого сгенерируете содержимое электронной почты в представлении, вы будете выполнять бизнес-логику в слое, который на самом деле должен использоваться только для отображения/вывода.
Предполагая, что генерация основного текста электронной почты на уровне модели является правильным решением, не имеет ли смысл также создавать HTML-ссылки на основе маршрутов фреймворка в этих электронных письмах?
buildLink()
нельзя использовать в модели. Он предназначен для слоя представления. Почему вы не можете использовать его вместо этого? - person Miguel-F   schedule 12.02.2019