Arhn - архитектура программирования

ember-cli и общие параметры поведения маршрута и контроллера: подкласс, миксин или инициализатор (сервис)?

У меня есть свойства и методы, которые я хочу предоставить большинству/всем экземплярам класса (т. е. всем, кроме нескольких маршрутов, контроллеров и т. д.). Кажется, есть несколько способов сделать это, и я ищу рекомендации по передовому опыту здесь.

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

needs: ['application'],
userSession: Ember.computed.alias('controllers.application.userSession')

непосредственно в контроллер.

Кроме того, я хочу переопределить все маршруты (кроме маршрута входа и, возможно, еще пару) реализаций beforeModel, чтобы проверить наличие userSession и перенаправить на маршрут входа, если он отсутствует.

Это реализуется в ember-cli FYI. Итак, в таком случае, каков здесь «правильный» подход? Пытаюсь ли я внедрить эти изменения через инициализаторы/сервисы? Создаю ли я примеси для этого (я не сторонник того, чтобы помнить об этом каждый раз, когда кто-то, работающий над этим, встраивает g-контроллер, который затем должен помнить о добавлении примеси).

16.09.2014

Ответы:


1

Звучит очень похоже на использование initializer и service — лучший подход (их разделение делает код чище). initializer — это просто код для загрузки service, всю тяжелую работу выполняет служба. initializer должно выглядеть примерно так:

import AuthService from '../services/auth';

export default {
  name: 'auth-service',
  initialize: function( container, app ) {
    app.register( 'service:auth', AuthService, { singleton: true } );
    app.inject( 'controller', 'auth', 'service:auth' );
    app.inject( 'route', 'auth', 'service:auth' );
  }
};

Затем это вводит auth в каждый контроллер и маршрут, и вы должны переместить userSession из своего приложения в службу.

Моя служба аутентификации слишком большая (а в моем случае: слишком специфичная, так как использует Firebase), чтобы цитировать ее здесь. Вчера я дал суть в ответе: firebase-authentic/25854719#25854719">Короткая задержка при попытке выполнить перенаправление с помощью ember route с аутентификацией firebase

И как вы упомянули: людям не обязательно помнить о включении миксинов, поскольку вы можете переопределить план, который используется, когда кто-то делает ember generate: http://www.ember-cli.com/#generators-and-blueprints

16.09.2014
  • Я задавался вопросом, было бы ответом манипулирование чертежами, если бы я пошел по пути миксина. Обсуждая это здесь, в офисе, мы склонялись к предложенному вами решению, но не были уверены, было ли это идиоматическим способом Ember или нет. Я попробую и отмечу ответ, если все пойдет хорошо. 16.09.2014
  • Вы сказали (и я нахожусь в том же месте), что вам понадобится служба авторизации в большинстве ваших маршрутов/контроллеров. Это само по себе является подсказкой, что вы должны внедрять его, а не needs-инг контроллера. Если вам это нужно только в нескольких контроллерах, то внедрение его именно в них может по-прежнему быть самым чистым решением с наименьшим шаблоном, хотя не обязательно очевидно, что оно вводится из точки зрения самого контроллера. 16.09.2014
  • Когда я реализую это, мне приходит в голову, что это решает только половину моей проблемы. Это переместит информацию о сеансе во внедренное свойство, но не будет иметь дело с в основном поведением маршрутов по умолчанию, чтобы переопределить хук beforeModel для перенаправления на вход в систему в определенных случаях. Или вы предлагаете миксины для этой части? Мне непонятно, как внедрить такое поведение... 16.09.2014
  • Это более достойно вопроса само по себе. Вы должны быть готовы к тому, что пользователь всегда может использовать инструменты разработчика браузера, чтобы получить доступ к вашим защищенным страницам. Другими словами, ограничьте доступ для чтения к данным на основе фактического статуса аутентификации на стороне Firebase. Чтобы справиться с этим на уровне маршрутизатора, этот ответ может помочь: stackoverflow.com/questions/24234810/ 16.09.2014
  • В моем случае с точки зрения безопасности не имеет большого значения, если они пытаются получить доступ к маршруту, который им не нужен, потому что без службы аутентификации, имеющей данные сеанса, никакие службы для серверной части не будут работать. (т.е. данные защищены). На самом деле это просто пользовательский опыт. В итоге я создал AuthenicatedRoute, который реализует хук beforeModel, как я и хотел. Затем я создал новый план, чтобы, когда я выполняю ember g route, он автоматически расширял мой AuthenicatedRoute по умолчанию. Кажется, работает нормально. 17.09.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..