2011-10-07 79 views
0

我在使用其模板系统开发Kohana中的多个网站,以便一个代码库使用相同的后端数据库运行多个网站。我开始在视图中看到很多if语句来说明这个网站是否这样做,如果该网站这样做的话。它开始看起来非常非MVC或面向对象。其他开发人员在决定将视图分解为单独的部分视图时是否遵循任何规则?我想尽可能多地重用代码,但不要在每个视图中的if语句中游泳。任何参考也会很好。在多站点应用程序中开发网页

回答

0

如果您使用Kohana,您应该使用模块来处理您不想为每个应用程序复制的内容。然后,您可以使用扩展类或配置文件中的特定设置在应用程序中保留特定内容。

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

很多if陈述大多是你需要做的重构的指示。允许加载不同站点的大型级联if声明是不好的做法,因为在您需要进行简单的添加或更改时,您会使文件tightly coupled导致编辑多个文件。此外,如果每个站点都需要加载不同的依赖关系或设置或者if语句中的任何内容,它最终会变得很难看。

很难说在没有看到代码的情况下需要更改的内容,但请尝试查看诸如factoryabstract factory设计模式的设计模式以创建站点对象。

一本处理PHP模式和最佳实践主题的好书是PHP 5:Matt Zandstra的对象,模式和实践:http://www.amazon.com/PHP-5-Objects-Patterns-Practice/dp/1590593804。一本很好的书。

0

我有一个类似的问题突然出现,为了保持视图很好,整洁,我将视图类扩展到一个主题类。我会给工厂方法两个(或更多)的意见,即主题::工厂(数组('site1 /家','默认/家'),$数据) - >绑定(...);如果存在主题视图,则使用该视图,否则仅提供默认视图。这样,我或其他不太能干的人可以很容易地重写以显示结构和查看行为。

类看起来像这样

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

你真的想要的ViewModels,只是你不知道如何将它们尚未命名。小鸟已经啁啾,它会在Kohana的3.3,但除非你有一年左右的等待,我建议您尝试要么View-Model module by Zombor或Kohana中的模板系统任何有利于KOstache (it's Mustache for Kohana)

搬走如果您有任何理由想要坚持使用当前的代码库,我会将视图拆分成几个较小的可互换部分,并在必要时加载它们(echo View :: Factory(($ something =='one'?'view_one':'view_two')) )或一个自定义的书面帮手将是一个很好的玩具)

相关问题