在一个视图中显示来自本地数据库和外部源的信息


Information from local DB and external source in one view

情况:
简化的情况是:考虑一个作为MVC项目构建的博客。YII博客的例子对此很好,但问题不是框架特定的:它没有什么特别的;你有一个包含帖子的表格和一个页面构建自:

  • 一个模型(YII将为您提供一个基本的活动记录设置(
  • 一个控制器,例如构建索引(所有帖子的列表(
  • 最终构建实际HTML的视图(或一些视图(

现在我有了一个工作博客,但我也有一个外部信息来源,我想介绍给这个页面:例如RSS提要。

如何添加此新数据源?

可能的解决方案
为了澄清我正在努力解决的问题,以下是我正在考虑的

  • 创建一个从两个来源获取信息的新模型
    • 感觉是阻力最小的方式/工作
    • 它需要按日期对博客文章和RSS项目进行排序
    • 它可能需要给出某种关于它是什么类型的项目的标志(RSS项目可能没有作者,但它确实有来源(
    • 事实上,上面的旗帜感觉是必要的,这让我相信这应该是两个模型
  • 为RSS创建一个新的模型,并创建一个控制器,将这两个源组合起来,并将其提供给一个可以处理这两种类型的帖子的视图
  • 一些更复杂的东西(可能更具体的框架(,但一篇文章的当前视图只是一个帖子的一个视图,而且它会重复。您可能不仅想要一个模型,还想要一个RSS视图,以及一个完成所有混合和匹配的控制器(?(,而不是一个处理这两种类型的视图

框架说明:
我正在使用YII,但它并不是关于YII的。当然,如果要做一些复杂的事情,我必须在YII中实现它,但这关乎设计和MVC模式,而不是;放在哪里;D

u可以有这样的东西(我也使用yii,所以下面的代码遵循yii框架(

class XyzController extends CController
{
.
.
.
    public function actionAbc()
    {
        .
                .
                .
        $this->render('viewname',array(
            'model1'=>$model1,//for posts frm table
                        'model2'=>$model2 //for rss feed
        ));
    }
}

为了更好地理解,请尝试在父视图"viewname"中为每种类型的帖子呈现两个独立的视图

如果必须这样做,我会为视图制作一个新的控制器,并使用两个模型

  • 我对mvc模式非常陌生,但从我目前所收集的信息来看,任何模型都应该将自己限制为只有一个数据源。除了CRUD操作之外,"业务逻辑"(如果有的话(也应该包含在该模型中。这里的业务逻辑是指适用于与web应用程序相关的数据源的逻辑,即您提到的内容,如按日期对RSS进行排序

  • 创建一个访问这两个模型的控制器,以填充视图

  • 最后,就Yii而言,组织mvc的这些组件/模块/部分的最佳方式取决于您的应用程序需求和ux

现在,我认为你也应该把这个问题放在程序员网站上
希望这能有所帮助
编辑:不太确定将排序、控制器或视图放在哪里。