Как развернуть функцию только для избранных пользователей

11

Хороший пример того, о чем я пытаюсь спросить, - это новая функция на Facebook. В начале, только немногие избранные имели доступ к временной шкале. По мере того, как функция стала более понятной в том, как она работала, и в ней были исправлены ошибки, дополнительные пользователи получили доступ к этой функции. Позднее большая группа пользователей получила доступ к этой функции, и теперь она является общей для всех пользователей. Как команда разработчиков управляет развертыванием этого типа функций?

Я поиграл с идеей использования параметров конфигурации для выборочного управления доступом, если что-то находится в процессе тестирования или в производстве, через файл конфигурации и условные операторы if в коде. Теперь, хотя это нормально для простых функций, я считаю, что если бы мы попытались реализовать это в более широком наборе функций, это стало бы неуправляемым.

Каков наилучший способ управления развертыванием функций таким способом?

Крис
источник
3
ACL и RBAC - это два (очень похожих) способа сделать то, что вы ищете.
Яннис
@YannisRizos: Конечно, это небольшой / короткий ответ, но я думаю, что он законно полезен. Вы должны опубликовать это как ответ.
Стивен Эверс
Разве это не одинаково для всех функций, а не только для новых? В зависимости от учетных данных пользователь имеет доступ к х количество вариантов? Например, уровень администратора может изменять настройки, а уровень доступа может только вводить данные?
Питер Б

Ответы:

2

Как команда разработчиков управляет развертыванием этого типа функций?

Легко догадаться, что такая система, как Facebook, в основном основана на базах данных. Все пользовательские данные, очевидно, хранятся в базах данных, и это, вероятно, включает информацию о том, как визуализировать пользовательские данные. Невозможно точно знать, как настроена база данных Facebook, но это должен быть случай, когда такая функция, как временная шкала, постепенно развертывается для пользователей путем периодического выбора пользователей в базе данных на основе некоторых критериев и изменения значения ( s) некоторого поля (полей).

Например, может быть , у них есть поле в таблице пользователей , как , timeline_statusчто имеет такие значения, как not offered, offered, previewи public. Исходя из этого, система Facebook может решить, как отобразить информационную страницу пользователя. Затем команда FB может опробовать функцию временной шкалы, выбрав некоторую группу пользователей и изменив значение этого поля.

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

Калеб
источник
9

... и условные операторы if в коде.

Да, это неправильный способ сделать это. Какой бы ни была функция X, если она настраиваема, она должна что-то расширять или заменять. Делай ЭТО в коде. Например, вещь FB может иметь что-то вроде этого:

class UserPageView;
class HatedTimelineView : UserPageView;
class OldViewEveryoneLikes : UserPageView;

Затем вы создадите фабрику, которая создает объекты UserPageView при посещении пользовательской страницы на основе конфигурации. Вы бы активировали этот вид. Нет глупых веток.

Вы хотите сделать это таким образом, потому что если кто-то попросит вас изменить его один раз, он попросит об этом снова. Далее они попросят изменить другую вещь. Загадывайте свою архитектуру особыми случаями, и если это повсеместно, у вас будет гигантская чаша нереализуемых, заплесневелых спагетти, а не многофункционального, зрелого продукта.

Эдвард Стрендж
источник
Вам нужно использовать условные операторы if. Иначе как ваша фабрика узнает, какой UserPageView вернуть? Тем не менее, я согласен, что если операторы во всем коде являются плохой идеей, вы хотите их централизовать.
Briddums
1

Подумайте об этой функции так же, как об административной функции на веб-сайте.

Когда страница загружается, проверьте, имеет ли пользователь необходимые права на функцию, если это так, загрузите ее.

Facebook, похоже, использует подход, основанный на местоположении, при развертывании новых функций. Это может быть так же просто, как посмотреть на IP-адрес пользователя, чтобы найти их местоположение.

Гордон
источник