Совершенствование проектирования MVC - модуль view - 1


/****************************************************************
VIEW MODULE
view, view_database, view_message
view_arche_1 (external), view_arche_2 (external) - these are 
  primarily html files 
****************************************************************/

/*view*/

class view extends database
  {
  }

/*view_db*/

class view_db extends view
  {
  function __construct($type)
    {
    parent::__construct();    
    $this->invoke($type);
    }
  private function invoke($type)
    {
    switch ($type) 
      {
      case "bookmarks":
        $this->html_bookmarks();
        break;
      case "tweets":
        $this->html_tweets();
        break;
      default:
        throw new Exception('Invalid View Type');
        break;
      }
    }
  private function html_bookmarks()
    {
    $email = $_SESSION['email'];
    $query_return = database::query("SELECT * FROM bo  WHERE email='$email' ORDER BY name ASC");
    $html_string='';
    while ($ass_array = mysqli_fetch_assoc($query_return))
      {
      $fav=$this->favicon($ass_array['url']);
      $html_string = $html_string . "<img name='bo_im' class='c' src='$fav' onerror='i_bm_err(this)'><a target='_blank' name='a1' class='b' href = $ass_array[url]>$ass_array[name]</a>";
      }      
    echo $html_string;
    } 
  private function html_tweets() 
    {
    $query_return = database::query("SELECT * FROM tw ORDER BY time DESC LIMIT 7");
    $time = time();
    $html_string='';
    while ($a = mysqli_fetch_assoc($query_return))
      {
      $html_string = $html_string . "<div class='Bb2b'><img class='a' src='pictures/$a[email].jpg' alt=''/><a class='a' href='javascript:void(0)'>$a[fname] posted <script type='text/javascript'>document.write(v0($time,$a[time]))</script></a><br/><p class='c'>$a[message]</p></div>";
      }
    echo $html_string;
    }
  private function favicon($url)     
    {    
    $pieces = parse_url($url);    
    $domain = isset($pieces['host']) ? $pieces['host'] : '';    
    if(preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs))       
      {     
      return $pieces['scheme'] . '://www.' . $regs['domain'] . '/favicon.ico';    
      }    
    return false;
    }
  }

class view_message extends view
  {
  function __construct($type)
    {    
    $this->invoke($type);
    }
  private function invoke($type)
    {
    $this->message($type);
    }   
  private function message($type)
    {
    $type_message = array( 
    'empty' => '<si_f>Please complete all fields.', 
    'name'=> '<su_f>Only letters or dashes for the name field.',
    'email' => '<si_f>Please enter a valid email.',  
    'taken' => '<si_f>Sorry that email is taken.', 
    'pass' => '<si_f>Please enter a valid password, 6-40 characters.',
    'validate' => '<si_f>Please contact <a class="d" href="mailto:support@archemarks.com">support</a> to reset your password.');    
    echo $type_message[$type];
    }
  }


229
2
php
задан 4 октября 2011 в 03:10 Источник Поделиться
Комментарии
1 ответ

Некоторые случайные замечания:


  • Что делает ваш базовый класс базе делать? Надеюсь, не то, что это звучит как. Вашей целью является раздельное хранение и логика просмотра, не добавить логику взгляд к вашей базе данных.

  • Иметь как статические, так и нестатические функции класса должны вызвать у вас подозрения (а это показатель, у этого класса есть один, то более объективным или непоследовательно написано).

  • Некоторые функции делают Эхо, некоторые возвращаются , а некоторые вызывают другие функции. Решайте одну сторону ;).

  • ссылаться на параметры функции разрешения? Взгляните на гораздо прохладнее волшебная функция __звоните.

Некоторые предложения:


  • Это, вероятно, хорошая идея, чтобы переместить один вид операций в собственные классы. Это становится более важно, когда вы добавить еще несколько операций.

  • Унифицировать способ ваш класс попасть и возвращаемые значения.

  • Представления не расширить базу данных.

Простой в реализации способ:


  • Пусть каждый вид будет собственный класс это.

  • Определить общий интерфейс для всех операций (например, ViewOperation с одной требуемой функции запуска()).

  • Создать главный класс вид , который отвечает, чтобы решить вид операций на подклассы.

Пример реализации:

interface ViewOperation
{
public function run();
}

public class ControllAdd implements ViewOperation
{
private $_types = array('pass' => '<xx_p>', 'fail' => '<xx_f>');

public function run()
{
$params = func_get_arg(1);
if(isset($params) && !empty($params) && array_key_exists($this->_types, $params))
{
return $this->_types[$params];
}
}
}

public class View
{
public function __call($name, $arguments)
{
// More security required here of course
require_once './ViewOperartopns/' . $name . '.php';

$instance = new $name;
return $instance->run($arguments);
}
}

1
ответ дан 5 октября 2011 в 07:10 Источник Поделиться