Ein gutes Beispiel für das, wonach ich fragen möchte, wäre die neue Timeline-Funktion von Facebook. Am Anfang hatten nur einige wenige Zugriff auf die Zeitleiste. Als sich die Funktionsweise der Funktion verfestigte und Fehler darin behoben wurden, wurde zusätzlichen Benutzern der Zugriff auf die Funktion gewährt. Zu einem späteren Zeitpunkt wurde einer großen Gruppe von Benutzern Zugriff auf die Funktion gewährt, und jetzt ist sie eine allgemeine Funktion für alle Benutzer. Wie verwaltet ein Entwicklungsteam diese Art der Einführung von Funktionen?
Ich habe mit der Idee gespielt, Konfigurationseinstellungen zu verwenden, um den Zugriff selektiv zu steuern, wenn sich etwas im Test oder in der Produktion befindet, und zwar über eine Konfigurationsdatei und bedingte if-Anweisungen im Code. Obwohl dies für einfache Funktionen in Ordnung ist, glaube ich, dass es unüberschaubar werden würde, wenn wir versuchen würden, dies in einem größeren Funktionsumfang zu implementieren.
Was wäre der beste Weg, um Feature-Rollouts auf diese Weise zu verwalten?
Antworten:
Es ist leicht zu erraten, dass ein System wie Facebook weitgehend von Datenbanken gesteuert wird. Alle Benutzerdaten werden offensichtlich in Datenbanken gespeichert, und dazu gehören wahrscheinlich Informationen zum Rendern der Benutzerdaten. Es ist unmöglich, genau zu wissen, wie die Datenbank von Facebook eingerichtet ist, aber es muss der Fall sein, dass eine Funktion wie die Zeitleiste schrittweise für Benutzer bereitgestellt wird, indem regelmäßig Benutzer in der Datenbank anhand einiger Kriterien ausgewählt und der Wert geändert werden ( s) einiger Felder.
Zum Beispiel, vielleicht haben sie ein Feld in der Benutzertabelle wie
timeline_status
die Werte , zBnot offered
,offered
,preview
, undpublic
. Allein auf dieser Grundlage könnte das Facebook-System entscheiden, wie die Infoseite des Benutzers gerendert werden soll. Das FB-Team kann dann die Timeline-Funktion ausprobieren, indem es eine Benutzergruppe auswählt und den Wert dieses Felds ändert.In der Praxis ist es sicher etwas komplizierter, aber die Kernidee ist, dass ein Benutzerkonto nur aus Daten besteht und einige dieser Daten bestimmen können, welche Funktionen verfügbar sind. Die Einführung einer neuen Funktion ist nur eine Frage der Aktualisierung der Benutzerdatensätze in der Datenbank.
quelle
Ja, das ist der falsche Weg. Was auch immer Feature X ist, wenn es konfigurierbar ist, muss es etwas erweitern oder ersetzen. Tun Sie das im Code. Zum Beispiel könnte das FB-Ding so etwas haben:
Dann würden Sie eine Factory erstellen, die UserPageView-Objekte erstellt, wenn Sie eine Benutzerseite basierend auf der Konfiguration besuchen. Sie würden diese Ansicht aktivieren. Keine dummen Zweige.
Sie möchten es auf diese Weise tun, denn wenn jemand Sie bittet, es einmal zu ändern, wird er erneut danach fragen. Weiter werden sie darum bitten, etwas anderes zu ändern. Rätseln Sie Ihre Architektur mit Sonderfällen, und wenn es überall ist, haben Sie eine riesige Schüssel mit nicht zu wartenden, schimmeligen Spaghetti anstelle eines funktionsreichen, ausgereiften Produkts.
quelle
Stellen Sie sich die Funktion genauso vor wie eine Verwaltungsfunktion auf einer Website.
Überprüfen Sie beim Laden einer Seite, ob der Benutzer über die richtigen Berechtigungen für die Funktion verfügt, wenn Sie sie laden.
Facebook scheint bei der Einführung neuer Funktionen einen standortbasierten Ansatz zu verwenden. Dies kann so einfach sein, als würden Sie die IP-Adresse des Benutzers überprüfen, um seinen Standort zu finden.
quelle