0

我有一个关于为移动和桌面开发的问题。
我需要为桌面提供移动和其他内容...想法如下:
[移动] 文本内容只有几个菜单项
[桌面]内容包含文本和图片,所有菜单项

都解决了这个问题,我有控制器识别请求的想法,然后它将加载model_mobile / model_desktopview_mobile / view_desktop ......对吗?

基本上会在控制器中:

if ($ request-> ismobile () === true)
{
include 'model_mobile.php';
include 'view_mobile.php';
}
else
{
include 'model_desktop.php';
include 'view_desktop.php';
}
4

2 回答 2

2

表示逻辑是视图实例的权限(仅供参考,视图不是哑模板)。

仅仅因为您决定通过移动设备而不是桌面与站点交互并不会改变域业务逻辑。模型保持不变。此更改仅影响视图,并取决于您的视图编写得如何。基本上有两种选择:

  1. View 使用不同的桌面和移动模板;从模型层请求所需的信息;呈现模板。这取决于事实,即移动客户端和桌面客户端的大部分信息都是相同的。

  2. 对于移动设备和桌面,您有不同的视图,并且已经知道每个视图可以使用哪些模板。在这种情况下,在使用模板渲染之前查看来自模型层的非常具体的信息的请求。

第二种方法对于高负载系统会更好(您可能会通过与存储进行更精确的交互来节省一点),但会带来一些代码重复。

当然,您可以在选项 nr.1 中提出如此精确的请求,但这需要有一个if ($desktop) .. else块重复整个视图,这将是一个明确的信号,即代码必须分成两个类并采用多态性。

控制器呢?

在这两个选项中,控制器保持不变。它仅通过更改视图状态(在第一种情况下)或决定将创建哪种类型的视图(在第二种情况下)来影响视图。

如果您需要对移动用户隐藏一些控制器操作(这已经通过使用不同的模板部分完成),您可以实现某种 ACL,它可以让您决定是否允许用户访问控制器上的特定方法。

当然,这一切都取决于你对 MVC的理解。

于 2012-07-14T13:52:40.533 回答
0

我会这样做:

  1. 在引导程序中,检测到它是一个移动请求
  2. 将用户重定向到可能的m.子域
  3. m.子域被路由到特殊的移动控制器
  4. 移动控制器实际上是相同的普通控制器,它只是用于移动设备的视图,并提供比普通控制器更多的有限功能。

应使用相同的模型以避免代码重复。

于 2012-07-14T07:43:36.940 回答