MVC,移动和桌面的不同内容

时间:2012-07-14 07:38:39

标签: php model-view-controller mobile controller desktop

我有关于开发移动设备和桌面设备的问题 我需要为桌面提供移动和其他内容......这个想法如下:
[移动] 仅包含少量菜单项的文字内容
[桌面] 内容包含文字和图片,所有菜单项为

为了解决这个问题,我认为控制器会识别请求,然后它会加载 model_mobile / model_desktop view_mobile / view_desktop ...是正确的吗?

基本上会在控制器中:

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

2 个答案:

答案 0 :(得分:2)

表示逻辑是View实例的范围(fyi,视图哑模板)。

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

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

  2. 您对移动设备和桌面设备有不同的视图,并且已知每个视图可用的模板。在这种情况下,在使用模板进行渲染之前,视图会从模型层请求非常具体的信息。

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

    当然你可以在选项nr.1中有这样精确的请求,但这需要一个if ($desktop) .. else块重复一遍视图,这将是一个明确的标志,代码必须被拆分在两个类和多态使用。

    控制器怎么样?

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

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

    当然,这一切都取决于你的understanding of MVC

答案 1 :(得分:0)

我会这样做:

  1. 在引导程序中,检测到它是移动请求
  2. 可能会将用户重定向到m.子域
  3. m. subdoimain被路由到特殊的移动控制器
  4. 移动控制器实际上是相同的普通控制器,只能看到移动设备,并提供比普通控制器更有限的功能。
  5. 应该使用相同的模型来避免代码重复。