我阅读了一些用于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 /客户端。它可以是浏览器,移动设备或任何类型的客户端。
从设计角度来看哪种设计更好?我只是想对它们有更多的了解。任何反馈都非常受欢迎。
答案 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 - 乍一看语法很奇怪,但是你意识到它有多聪明。