从后端服务渲染UI是一个很好的设计吗?

时间:2015-12-14 08:25:02

标签: php rest design-patterns yii

我阅读了一些用于web应用程序的MVC框架,如play-framework,yii等。他们希望让服务器端呈现UI并将其发送到浏览器端。请参阅下面的yii代码作为示例,

我创建了一个php类,如下所示:

<?php

namespace app\controllers;

use yii\web\Controller;

class SiteController extends Controller
{
    // ...existing code...

    public function actionSay($message = 'Hello')
    {
        return $this->render('say', ['message' => $message]);
    }
}

然后我创建一个视图php文件:

<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>

当在控制器类的操作中调用render方法时,它将呈现视图并将其返回给浏览器。

我看到有一些框架正在使用这种设计模式。从设计的角度来看,我是否喜欢它是一个好主意。它们似乎将UI和服务结合在一起。每当我们在UI上更改某些内容时,我们都必须对服务器代码进行相应的更新。

我想将UI和后端服务分离到不同的层。例如,服务可以通过http协议侦听一个安静的地址端口。客户端将请求/发布这些安静的接口。通过这种方式,服务器端不知道谁是UI /客户端。它可以是浏览器,移动设备或任何类型的客户端。

从设计角度来看哪种设计更好?我只是想对它们有更多的了解。任何反馈都非常受欢迎。

1 个答案:

答案 0 :(得分:1)

你问过一个非常主观的问题,所以你可能会被标记出来。不过,我会提出我的观点,如果它有用,那太好了!

将UI与服务分开是正确的,但您可以将UI和服务分开,而无需在客户端上呈现UI。

如果您正在使用PHP,那么您将创建一个RESTful API,如您所说,它负责获取/content/143之类的URL并返回一些JSON。然后,您可以创建一个呈现前端,直接接收来自用户的请求,命中您的API以获取内容,然后将其转换为呈现的HTML供用户使用。我使用Guzzle并且它工作得很好,但如果你预计会有任何严重的负载,你应该在渲染器中实现缓存。

如果你想在客户端上放置UI渲染,那也没关系:再次用PHP制作你的API(我只是说因为你的PHP标签),但是然后使用工具包创建前端比如React,在客户端上呈现所有内容。

这两个选项都有优势,所以它实际上取决于技能可用性和精确的用例。

无论您选择什么,使用某种输出模板系统基本上都是必须的。如果你想要一个纯粹的PHP方法,Twig非常适合这个。如果你尝试使用React,你很快就会遇到一些叫做JSX的东西,这是一种可以编译成JavaScript的XML - 乍一看语法很奇怪,但是你意识到它有多聪明。