Come distribuire una funzione solo a pochi utenti selezionati


11

Un buon esempio di ciò che sto cercando di chiedere potrebbe essere la nuova funzione Timeline di Facebook. All'inizio, solo pochi eletti potevano accedere alla sequenza temporale. Man mano che la funzionalità si rafforzava nel modo in cui funzionava e venivano corretti dei bug, gli utenti aggiuntivi potevano accedere alla funzione. In un secondo momento, a un folto gruppo di utenti è stato consentito l'accesso alla funzione e ora è una funzionalità generale per tutti gli utenti. In che modo un team di sviluppo gestisce questo tipo di funzionalità?

Ho giocato con l'idea di utilizzare le impostazioni di configurazione per controllare selettivamente l'accesso se qualcosa è in fase di test o in produzione tramite un file di configurazione e se le istruzioni nel codice sono condizionali. Ora, mentre questo va bene per funzionalità semplici, credo che se provassimo a implementarlo in un set di funzionalità più ampio, diventerebbe ingestibile.

Quale sarebbe il modo migliore di gestire le funzioni di roll-out in questo modo?


3
ACL e RBAC sono due modi (molto simili) per fare ciò che stai cercando.
yannis,

@YannisRizos: Concesso, questa è una risposta piccola / breve, ma penso che sia legittimamente utile. Dovresti pubblicarlo come risposta.
Steven Evers,

Non è sostanzialmente lo stesso per tutte le funzionalità non solo nuove? A seconda delle credenziali, l'utente ha accesso a x quantità di opzioni? Ad esempio il livello di amministratore può modificare le impostazioni e il livello di grugnito può solo digitare i dati?
Pieter B,

Risposte:


2

In che modo un team di sviluppo gestisce questo tipo di funzionalità?

È facile intuire che un sistema come Facebook sia guidato in gran parte da database. Tutti i dati dell'utente sono ovviamente archiviati in database e ciò probabilmente include informazioni su come renderizzare i dati dell'utente. È impossibile sapere esattamente come è impostato il database di Facebook, ma deve essere il caso che una funzionalità come Timeline sia distribuita agli utenti in modo graduale selezionando periodicamente gli utenti nel database, in base ad alcuni criteri, e modificando il valore ( s) di alcuni campi.

Per esempio, forse hanno un campo nella tabella utente simile timeline_statusche ha valori quali not offered, offered, previewe public. Basandosi solo su questo, il sistema di Facebook potrebbe decidere come rendere la pagina delle informazioni dell'utente. Il team FB potrebbe quindi provare la funzione Timeline selezionando un gruppo di utenti e modificando il valore di quel campo.

In pratica, sono sicuro che sia un po 'più complicato di così, ma l'idea di base è che un account utente è solo un dato, e alcuni di questi dati possono determinare quali funzionalità sono disponibili. L'implementazione di una nuova funzionalità è quindi solo una questione di aggiornamento dei record utente nel database.


9

... e condizionalmente se le istruzioni nel codice.

Sì, è il modo sbagliato di farlo. Qualunque sia la funzione X se è configurabile, deve estendere o sostituire qualcosa. Fallo nel codice. Ad esempio, la cosa FB potrebbe avere qualcosa del genere:

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

Quindi costruiresti una fabbrica che crea oggetti UserPageView quando visiti una pagina utente in base alla configurazione. Attiveresti quella vista. Niente rami sciocchi.

Vuoi farlo in questo modo perché se qualcuno ti chiede di cambiarlo una volta, te lo chiederanno di nuovo. Inoltre chiederanno di cambiare un'altra cosa. Disegna la tua architettura con casi speciali e se è dappertutto e avrai una ciotola gigante di spaghetti ammuffibili e ammuffiti piuttosto che un prodotto ricco e ricco di funzionalità.


È necessario utilizzare le istruzioni if ​​condizionali. Altrimenti come fa la tua fabbrica a sapere quale UserPageView restituire? Detto questo, concordo sul fatto che se le istruzioni in tutto il codice sono una cattiva idea, si desidera centralizzarle.
Briddums,

1

Pensa alla funzione nello stesso modo in cui penseresti a una funzione di amministrazione su un sito Web.

Durante il caricamento di una pagina, verifica se l'utente dispone dei privilegi giusti per la funzione, in tal caso caricala.

Facebook sembra utilizzare un approccio basato sulla posizione quando si implementano nuove funzionalità. Questo potrebbe essere semplice come guardare l'indirizzo IP degli utenti per trovare la loro posizione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.