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