2009-07-22 5 views
0

Ich habe eine kleinere Web-App, die Inhalte von einer sozialen Quelle zu einer anderen veröffentlicht. Benutzer haben, sagen wir, 5 Optionen, um diesen Inhalt zu filtern. Ihre Einstellungen sind in meiner Benutzerdatenbank als 1 oder 0 Marker gespeichert.Was ist der beste Weg, Benutzereinstellungen in dieser PHP-App zu implementieren?

Wenn ich meine große "publish" -Aktion stündlich ausführe, was ist der beste Weg, meinen Code zu brechen, um diese Einstellungen zu implementieren? Um es klar, ist meine aktuelle Implementierung etwas wie folgt aus:

mysql_query(SELECT * FROM users); 
foreach ($user as $row){ 
    get_json_data($userID); 
    if ($pref1 == 1){ 
     /code that enacts preference 1, adds results to array $filtereddata 
    } 
    if ($pre2 == 1){ 
     /code that filters out preference 2, adds results to $filtereddata 
    { 
    postfinalarray($filtereddata); 
} 

Offensichtlich ist dies Mock-Code, aber das ist der allgemeine Fluss Ich habe mit. Gibt es eine bessere Möglichkeit, das Anpassen einer Funktion mit Benutzereinstellungen zu implementieren? Soll ich die Funktion so gestalten, dass diese Einstellungen als Parameter akzeptiert werden? Wird das Verarbeitungszeit sparen oder wartbarer sein?

Sorry, wenn das zu allgemein ist, stellen Sie bitte Fragen, damit ich klären kann.

Antwort

1

Nun natürlich gibt es viele Möglichkeiten, diese Art von Code zu verbessern. Stellen Sie sich vor, wenn Sie eine andere Einstellung hinzufügen würden, müssten Sie Ihren gesamten Code neu schreiben. ich immer versuchen, die objektorientierte Art und Weise eine Benutzerklasse zu verwenden, so zu schaffen macht immer Sinn:

<?php 

class User 
{ 
    private $_data; 

    public function __construct($userdata, $preferences) 
    { 
     $this->_data = $userdata; 
    } 

    public function getPreferencesData($preferences) 
    { 
     $result = array(); 
     $prefs = $this->_data['preferences']; 
     foreach($preferences as $key => $value) 
     { 
      if($value == "1") 
       $result[] = $this->_data[$key]; 
     } 
     return $result; 
    } 
} 

$mypreferences = array("name" => 1, "birthdate" => 0); // show e.g. name and birthdate 
$mydata = array("name" => "Gaius Julius Caesar", "birthdate" => "July 13th -100"); 
$testuser = new User($mydata); 
print_r($test->getPreferencesData($mypreferences)); 

?> 

Dann können Sie leicht Vorlieben anpassen whatefer der Benutzer, ohne dass Sie Ihren Code ändern gewählt hat.

0

Von den begrenzten Informationen, die Sie zur Verfügung gestellt haben, scheint Ihre Methode in Ordnung.

Ich würde wahrscheinlich etwas etwas anderes tun. Ich würde eine Tabelle mit Ihren 5 Präferenzen haben (oder würde sie nur hart codieren, wenn es sehr unwahrscheinlich ist, dass sie sich ändern). Ich würde eine Querverweistabelle erstellen, die die Einstellungen und Benutzer verbindet. Dann können Sie so etwas wie:

foreach($users as $user) 
{ 
    $filtereddata = array(); 
    foreach($user->getPreferences() as $pref) 
    { 
     $filtereddata += $this->getFilteredData($user, $pref); 
    } 
} 

Dies ist mehr Aufwand als das, was Sie verwenden, aber leichter erweiterbar, wenn/falls Sie fügen Präferenzen/Funktionen.

Verwandte Themen