Хороший пример того, о чем я пытаюсь спросить, - это новая функция на Facebook. В начале, только немногие избранные имели доступ к временной шкале. По мере того, как функция стала более понятной в том, как она работала, и в ней были исправлены ошибки, дополнительные пользователи получили доступ к этой функции. Позднее большая группа пользователей получила доступ к этой функции, и теперь она является общей для всех пользователей. Как команда разработчиков управляет развертыванием этого типа функций?
Я поиграл с идеей использования параметров конфигурации для выборочного управления доступом, если что-то находится в процессе тестирования или в производстве, через файл конфигурации и условные операторы if в коде. Теперь, хотя это нормально для простых функций, я считаю, что если бы мы попытались реализовать это в более широком наборе функций, это стало бы неуправляемым.
Каков наилучший способ управления развертыванием функций таким способом?
Ответы:
Легко догадаться, что такая система, как Facebook, в основном основана на базах данных. Все пользовательские данные, очевидно, хранятся в базах данных, и это, вероятно, включает информацию о том, как визуализировать пользовательские данные. Невозможно точно знать, как настроена база данных Facebook, но это должен быть случай, когда такая функция, как временная шкала, постепенно развертывается для пользователей путем периодического выбора пользователей в базе данных на основе некоторых критериев и изменения значения ( s) некоторого поля (полей).
Например, может быть , у них есть поле в таблице пользователей , как ,
timeline_status
что имеет такие значения, какnot offered
,offered
,preview
иpublic
. Исходя из этого, система Facebook может решить, как отобразить информационную страницу пользователя. Затем команда FB может опробовать функцию временной шкалы, выбрав некоторую группу пользователей и изменив значение этого поля.На практике я уверен, что это немного сложнее, но основная идея заключается в том, что учетная запись пользователя - это просто данные, и некоторые из этих данных могут определять, какие функции доступны. Внедрение новой функции - это всего лишь вопрос обновления пользовательских записей в базе данных.
источник
Да, это неправильный способ сделать это. Какой бы ни была функция X, если она настраиваема, она должна что-то расширять или заменять. Делай ЭТО в коде. Например, вещь FB может иметь что-то вроде этого:
Затем вы создадите фабрику, которая создает объекты UserPageView при посещении пользовательской страницы на основе конфигурации. Вы бы активировали этот вид. Нет глупых веток.
Вы хотите сделать это таким образом, потому что если кто-то попросит вас изменить его один раз, он попросит об этом снова. Далее они попросят изменить другую вещь. Загадывайте свою архитектуру особыми случаями, и если это повсеместно, у вас будет гигантская чаша нереализуемых, заплесневелых спагетти, а не многофункционального, зрелого продукта.
источник
Подумайте об этой функции так же, как об административной функции на веб-сайте.
Когда страница загружается, проверьте, имеет ли пользователь необходимые права на функцию, если это так, загрузите ее.
Facebook, похоже, использует подход, основанный на местоположении, при развертывании новых функций. Это может быть так же просто, как посмотреть на IP-адрес пользователя, чтобы найти их местоположение.
источник