Dobrym przykładem tego, o co staram się zapytać, jest nowa funkcja osi czasu Facebooka. Na początku tylko nieliczni mieli dostęp do osi czasu. Ponieważ funkcja stała się bardziej ugruntowana w działaniu, a błędy zostały w niej naprawione, dodatkowi użytkownicy mieli dostęp do tej funkcji. W późniejszym czasie duża grupa użytkowników miała dostęp do tej funkcji, a teraz jest to ogólna funkcja dla wszystkich użytkowników. Jak zespół programistów zarządza wprowadzaniem tego typu funkcji?
Grałem z pomysłem użycia ustawień konfiguracyjnych do selektywnej kontroli dostępu, jeśli coś jest w fazie testowej lub produkcyjnej za pomocą pliku konfiguracyjnego i warunkowe, jeśli instrukcje w kodzie. Teraz, chociaż jest to w porządku dla prostych funkcji, uważam, że jeśli spróbujemy zaimplementować to w większym zestawie funkcji, stanie się to niemożliwe do zarządzania.
Jaki byłby najlepszy sposób zarządzania wdrażaniem funkcji w ten sposób?
Odpowiedzi:
Łatwo zgadnąć, że system taki jak Facebook jest napędzany głównie przez bazy danych. Wszystkie dane użytkownika są oczywiście przechowywane w bazach danych, a to prawdopodobnie obejmuje informacje o tym, jak renderować dane użytkownika. Nie można dokładnie wiedzieć, jak konfigurowana jest baza danych Facebooka, ale musi tak być, że funkcja taka jak Oś czasu jest wprowadzana do użytkowników w sposób stopniowy, poprzez okresowe wybieranie użytkowników w bazie danych na podstawie niektórych kryteriów i zmianę wartości ( s) niektórych pól.
Na przykład, może oni mają pole w tabeli użytkownika jak
timeline_status
to ma wartości takie jaknot offered
,offered
,preview
, ipublic
. Na tej podstawie system Facebooka może decydować o sposobie renderowania strony informacyjnej użytkownika. Zespół FB mógł następnie wypróbować funkcję Oś czasu, wybierając grupę użytkowników i zmieniając wartość tego pola.W praktyce jestem pewien, że jest to trochę bardziej skomplikowane, ale podstawową ideą jest to, że konto użytkownika to tylko dane, a niektóre z tych danych mogą określać, które funkcje są dostępne. Wdrożenie nowej funkcji jest więc tylko kwestią aktualizacji rekordów użytkowników w bazie danych.
źródło
Tak, to zły sposób na zrobienie tego. Czymkolwiek jest X, jeśli jest konfigurowalna, musi coś rozszerzyć lub wymienić. Zrób TO w kodzie. Na przykład FB może mieć coś takiego:
Następnie zbudujesz fabrykę, która tworzy obiekty UserPageView podczas odwiedzania strony użytkownika na podstawie konfiguracji. Aktywowałbyś ten widok. Żadnych głupich gałęzi.
Chcesz to zrobić w ten sposób, ponieważ jeśli ktoś poprosi cię o zmianę raz, poprosi o to ponownie. Ponadto będą prosić o zmianę innej rzeczy. Rozwiąż swoją architekturę specjalnymi skrzynkami, a jeśli jest wszędzie, a będziesz miał gigantyczną miskę niemożliwego do utrzymania, spleśniałego spaghetti zamiast bogatego w funkcje, dojrzałego produktu.
źródło
Pomyśl o tej funkcji tak samo, jak o funkcji administracyjnej w witrynie ślubnej.
Podczas ładowania strony sprawdź, czy użytkownik ma odpowiednie uprawnienia do tej funkcji, jeśli tak, załaduj ją.
Wydaje się, że Facebook wprowadza podejście oparte na lokalizacji przy wdrażaniu nowych funkcji. Może to być tak proste, jak sprawdzenie adresu IP użytkownika w celu znalezienia jego lokalizacji.
źródło