Используя ColdBox Framework, как я могу использовать BuildLink () внутри моей модели? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть сервис модели фреймворка CFML ColdBox, который должен создавать ссылки.Однако модели не имеют доступа к фреймворку SuperType, поэтому не имеют доступа к event.buildLink().

Как я могу предоставить сервисам в моей модели возможность создавать ссылки?Есть ли способ сделать функциональность buildLink() доступной через какое-то внедрение зависимостей?

Пример службы модели:

component 
    singleton
{

    function getLinkToUser( required numeric userId ) {

        return event.buildLink( "users.#arguments.usersId#" );

    }

}

- Обновление -

Многиеиз комментариев предполагается, что встраивание функциональных возможностей фреймворка в модель может быть ошибкой, и что buildLink() действительно следует использовать только в представлениях.По большей части, я согласен и чувствую, что внедрение сервисов фреймворка в модель нарушает инкапсуляцию и проблемы.

При этом давайте расширим пример кода выше для более реальной ситуации: допустим, у вас естьМодельный сервис, который генерирует электронные письма клиентам, и содержание этих электронных писем во многом определяется сложными бизнес-правилами.В этом случае я мог видеть аргумент для генерации содержимого электронной почты в модели, потому что именно там живут бизнес-правила.

Если вместо этого вы генерируете содержимое электронной почты в представлении, вы выполняете бизнес-логику в слое, который действительно должен использоваться только для отображения / вывода.

Предполагается, что генерация основного текста электронного письмана уровне модели это правильно, разве не имеет смысла, что он также должен иметь возможность создавать HTML-ссылки, основанные на маршрутах фреймворка в этих электронных письмах?

...