我在使用其模板系统开发Kohana中的多个网站,以便一个代码库使用相同的后端数据库运行多个网站。我开始在视图中看到很多if语句来说明这个网站是否这样做,如果该网站这样做的话。它开始看起来非常非MVC或面向对象。其他开发人员在决定将视图分解为单独的部分视图时是否遵循任何规则?我想尽可能多地重用代码,但不要在每个视图中的if语句中游泳。任何参考也会很好。在多站点应用程序中开发网页
回答
如果您使用Kohana,您应该使用模块来处理您不想为每个应用程序复制的内容。然后,您可以使用扩展类或配置文件中的特定设置在应用程序中保留特定内容。
http://kohanaframework.org/3.2/guide/kohana/modules
很多if
陈述大多是你需要做的重构的指示。允许加载不同站点的大型级联if
声明是不好的做法,因为在您需要进行简单的添加或更改时,您会使文件tightly coupled导致编辑多个文件。此外,如果每个站点都需要加载不同的依赖关系或设置或者if语句中的任何内容,它最终会变得很难看。
很难说在没有看到代码的情况下需要更改的内容,但请尝试查看诸如factory或abstract factory设计模式的设计模式以创建站点对象。
一本处理PHP模式和最佳实践主题的好书是PHP 5:Matt Zandstra的对象,模式和实践:http://www.amazon.com/PHP-5-Objects-Patterns-Practice/dp/1590593804。一本很好的书。
我有一个类似的问题突然出现,为了保持视图很好,整洁,我将视图类扩展到一个主题类。我会给工厂方法两个(或更多)的意见,即主题::工厂(数组('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 '"),
));
}
}
你真的想要的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')) )或一个自定义的书面帮手将是一个很好的玩具)
- 1. 对网站应用程序的开发
- 2. 开发购物网站应用程序
- 3. 从哪里开始为网站开发应用程序
- 4. 在开发者站点上传应用程序问题
- 5. 如何在Java中开发多点触控应用程序?
- 6. 从网站打开UWP应用程序
- 7. 从PHP/Javascript代码网站/页面打开iphone应用程序
- 8. iPhone与网站风格应用程序的网站开发时间
- 9. 多站点SVN /开发工作流程
- 10. 同ASP.Net应用程序 - 多IIS站点
- 11. sharepoint开发概念问题 - 关于网站和应用程序
- 12. 为现有网站开发移动应用程序(Iphone,Blackberry,Android)
- 13. 从Wordpress网站开发新闻应用程序
- 14. 为JSP和MySQL开发的网站构建Android应用程序
- 15. 开发可通过手机应用程序访问的网站
- 16. 如何开发网站生成器应用程序
- 17. 从网页打开.NET应用程序
- 18. 网站和应用程序开发是否需要不同的开发人员?
- 19. 在Java中开发点对点应用程序
- 20. 需要示例应用程序开发自己的网站和应用程序在asp.net中使用c#
- 21. 如何在iphone应用程序中打开https网站?
- 22. 点击网页链接应用程序将打开
- 23. Phonegap - 从网页和触发功能(IOS)打开应用程序
- 24. Rails中跨域的单点登录多站点应用程序?
- 25. 在Android应用程序开发中使用互联网服务
- 26. 在Java中开发多线程应用程序
- 27. IIS6中的多个网站或多个Web应用程序?
- 28. 在Silverlight中打开网页Windows Phone应用程序
- 29. 如何在我的应用程序中打开网页?
- 30. 在Android应用程序中打开网关设置页面(192.168.1.1)