2009-07-22 1 views
0

소셜 소스에서 다른 사회 소스로 콘텐츠를 다시 게시하는 소규모 웹 앱이 있습니다. 사용자는 콘텐츠 필터링 방법에 대해 5 가지 옵션을 설정한다고 가정 해 보겠습니다. 그들의 환경 설정은 내 사용자 DB에 1 또는 0 마커로 저장됩니다.이 PHP 앱에서 사용자의 환경 설정을 구현하는 가장 좋은 방법은 무엇입니까?

매시간 주요 "게시"작업을 수행 할 때 이러한 기본 설정을 구현하기 위해 코드를 분해하는 가장 좋은 방법은 무엇입니까? 좀 더 명확하게하기 위해, 내 현재의 구현은 다음과 같이이다 :

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); 
} 

은 분명히이 모의 코드,하지만 내가 사용했던 일반적인 흐름이다. 사용자 환경 설정으로 기능을 사용자 정의하여 구현하는 더 좋은 방법이 있습니까? 이러한 환경 설정을 매개 변수로 받아 들일 함수를 설계해야합니까? 그러면 처리 시간이 절약되거나 유지 관리가 가능합니까?

죄송합니다. 너무 일반적인 경우, 내가 명확히 할 수 있도록 질문하십시오.

답변

1

물론 이러한 종류의 코드를 개선 할 수있는 가능성은 많습니다. 상상해보십시오. 다른 환경 설정을 추가하면 전체 코드를 다시 작성해야합니다. 나는 항상 사용자 클래스를 생성하는 객체 지향 방법을 사용하려고 항상 의미가 있습니다 :

<?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)); 

?> 

그럼 당신은 쉽게 코드를 변경하지 않고도 사용자가 선택한 설정을 whatefer에 적응할 수 있습니다.

0

제공 한 제한된 정보로부터 방법이 잘된 것 같습니다.

아마도 약간 다른 것을 할 것입니다. 나는 당신의 5 가지 prefs 테이블을 가지고있을 것이다. 내가 prefs와 사용자를 연결하는 상호 참조 테이블을 만들 것입니다. 이보다 쉽게 ​​확장 가능한 더 많은 오버 헤드가 사용중인 것보다,하지만

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

당신이 환경 설정/기능을 추가 할 때/경우 : 그럼 당신은 뭔가를 할 수 있습니다.

관련 문제