Como implementar um recurso para apenas alguns usuários selecionados

11

Um bom exemplo do que estou tentando perguntar seria o novo recurso de linha do tempo do Facebook. No começo, apenas alguns selecionados tinham acesso à linha do tempo. À medida que o recurso se solidificava no funcionamento e os bugs eram corrigidos, usuários adicionais tiveram acesso ao recurso. Posteriormente, um grande grupo de usuários teve acesso ao recurso e agora é um recurso geral para todos os usuários. Como uma equipe de desenvolvimento gerencia esse tipo de recurso?

Eu brinquei com a idéia de usar as definições de configuração para controlar seletivamente o acesso se algo estiver em teste ou em produção por meio de um arquivo de configuração e com instruções condicionais if no código. Agora, enquanto isso é válido para recursos simples, acredito que, se tentássemos implementar isso em um conjunto maior de recursos, isso se tornaria incontrolável.

Qual seria a melhor maneira de gerenciar lançamentos de recursos dessa maneira?

Chris
fonte
3
ACL e RBAC são duas maneiras (muito semelhantes) de fazer o que você está procurando.
Yannis 14/05
@YannisRizos: É verdade que é uma resposta pequena / curta, mas acho que é legitimamente útil. Você deve publicá-lo como resposta.
Steven Evers
Isso não é basicamente o mesmo para todos os recursos, não apenas novos? Dependendo das credenciais, o usuário tem acesso a x quantidade de opções? Por exemplo, o nível do administrador pode alterar as configurações e o nível do grunhido pode digitar apenas os dados?
Pieter B

Respostas:

2

Como uma equipe de desenvolvimento gerencia esse tipo de recurso?

É fácil adivinhar que um sistema como o Facebook é impulsionado principalmente por bancos de dados. Todos os dados do usuário são obviamente armazenados em bancos de dados, e isso provavelmente inclui informações sobre como renderizar os dados do usuário. É impossível saber exatamente como o banco de dados do Facebook está configurado, mas deve ser o caso de um recurso como o Timeline ser lançado aos usuários de maneira gradual, selecionando periodicamente os usuários no banco de dados, com base em alguns critérios e alterando o valor ( s) de alguns campos.

Por exemplo, talvez eles têm um campo na tabela user como timeline_statusque tem valores como not offered, offered, preview, e public. Com base nisso, o sistema do Facebook pode decidir como renderizar a página de informações do usuário. A equipe do FB poderia então experimentar o recurso Linha do tempo selecionando um grupo de usuários e alterando o valor desse campo.

Na prática, tenho certeza de que é um pouco mais complicado que isso, mas a idéia principal é que uma conta de usuário seja apenas dados, e alguns desses dados podem determinar quais recursos estão disponíveis. A implantação de um novo recurso é apenas uma questão de atualizar os registros do usuário no banco de dados.

Caleb
fonte
9

... e condicionais if declarações no código.

Sim, essa é a maneira errada de fazer isso. Qualquer que seja o recurso X, se for configurável, ele deverá estender ou substituir algo. Faça isso no código. Por exemplo, a coisa do FB pode ter algo assim:

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

Em seguida, você criaria uma fábrica que cria objetos UserPageView ao visitar uma página de usuário com base na configuração. Você ativaria essa visão. Sem galhos tolos.

Você quer fazer dessa maneira, porque se alguém lhe pedir para mudar uma vez, ele solicitará novamente. Além disso, eles pedirão para mudar outra coisa. Enigma sua arquitetura com casos especiais e se está por toda parte e você terá uma tigela gigante de espaguete mofado e inatingível, em vez de um produto maduro e rico em recursos.

Edward Strange
fonte
Você precisa usar instruções if condicionais. Caso contrário, como sua fábrica sabe qual UserPageView retornar? Dito isso, concordo que colocar as instruções if em todo o código é uma má idéia, você deseja centralizá-las.
Briddums 15/05
1

Pense no recurso da mesma maneira que você pensaria em um recurso de administração em um local de casamento.

Quando uma página está carregando, verifique se o usuário tem os privilégios corretos para o recurso, se for o caso.

O Facebook parece usar uma abordagem baseada em localização ao lançar novos recursos. Pode ser tão simples quanto olhar o endereço IP do usuário para encontrar sua localização.

Gordon
fonte