Разработка веб-страниц в мультисайтовом приложении - PullRequest
0 голосов
/ 08 октября 2011

Я разрабатываю несколько веб-сайтов в Кохане, используя его систему шаблонов, чтобы одна кодовая база работала на нескольких веб-сайтах с использованием одной и той же внутренней базы данных. Я начинаю видеть много утверждений if в представлениях, чтобы сказать, если этот сайт делает это, если этот сайт делает это. Это начало выглядеть очень не MVC или объектно-ориентированным. Есть ли у других разработчиков какие-либо правила, которым они следуют, решая разделить представление на отдельные частичные представления? Я хочу использовать как можно больше кода, но не использовать оператор if в каждом представлении. Любая ссылка была бы отличной.

Ответы [ 3 ]

0 голосов
/ 08 октября 2011

У меня возникла похожая проблема, чтобы сохранить красивые и аккуратные представления, я расширил класс представления до класса темы. Я бы дал фабричному методу два (или более) представления, т.е. Theme :: factory (array ('site1 / home', 'default / home'), $ data) -> bind (...); Если бы существовало тематическое представление, оно использовало бы это, иначе просто служило бы по умолчанию. Таким образом, я или кто-то менее компетентный мог бы легко переопределить, чтобы отобразить структуру и просмотреть поведение.

Класс выглядит так

class Theme extends View {

public static function factory($pages = NULL, array $data = NULL){
  if (is_string($pages)) {
    $pages=array($pages);
  } 
  if (!is_array($pages)) {
    $pages=array(0=>null);
  }


foreach ($pages as $page){
  if ((Kohana::find_file('views', 'themes/'.$page)) !== FALSE){
    return new View('themes/'.$page,$data);
  }
}

throw new Kohana_View_Exception("None of the requested views ':file' could not be found.", array(
            ':file' => join($pages,"' or '"),
  ));
} 
}
0 голосов
/ 09 октября 2011

Вы действительно хотите ViewModels, только вы еще не знаете, как их назвать. Маленькие птички пишут в Твиттере, что это будет в Kohana 3.3, но если у вас нет года или около того, чтобы ждать, я рекомендую попробовать либо модуль View-Model от Zombor , либо отойти от шаблонной системы Kohana, что бы ни было в пользу KOstache (это усы для кохана)

Если по какой-либо причине вы хотите придерживаться своей текущей кодовой базы, я бы разделил представление на несколько меньших взаимозаменяемых частей и, при необходимости, загрузил их (echo View :: Factory (($thing == 'one'? 'view_one': 'view_two')) или пользовательский помощник был бы хорошей игрушкой)

0 голосов
/ 08 октября 2011

Если вы используете Kohana, вы должны использовать модули для вещей, которые вы не хотите дублировать для каждого приложения.Затем вы можете сохранить специфику в вашем приложении с расширенными классами или специальными настройками в конфигурационных файлах.

http://kohanaframework.org/3.2/guide/kohana/modules

Многие операторы if в основном указывают на то, что вам необходимо выполнить рефакторинг,Большой каскадный оператор if, позволяющий загружать различные сайты, является плохой практикой в ​​том смысле, что вы создаете файлы тесно связанные , что приводит к необходимости редактирования нескольких файлов, когда вам нужно сделать простое добавление или изменение.Кроме того, в конечном итоге станет некрасиво, если каждый сайт должен загружать разные зависимости или настройки или что-то еще в вашем выражении if.

Трудно сказать, что вам нужно изменить, не видя код, но попробуйте взглянуть на шаблоны проектирования.как factory или abstract factory шаблоны проектирования для создания объектов сайта.

Хорошей книгой, которая посвящена теме паттернов и лучших практик с PHP, является PHP 5: Объекты, паттерны и практика. Автор Matt Zandstra: http://www.amazon.com/PHP-5-Objects-Patterns-Practice/dp/1590593804. Очень хорошая книга.

...