【问题标题】:MVC, different content for mobile and desktopMVC,移动和桌面的不同内容
【发布时间】:2012-07-14 07:38:38
【问题描述】:

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

为了解决这个问题,我的想法是控制器识别请求,然后它会加载 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';
}

【问题讨论】:

  • 我猜,模型应该是一样的,只是改变视图和你传递给他们的信息。当然,您将需要一组不同的控制器来与用户交互。

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


【解决方案1】:

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

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

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

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

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

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

控制器呢?

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

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

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

【讨论】:

  • 感谢您的评论,对我帮助很大。
【解决方案2】:

我会这样做:

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

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

【讨论】:

  • 了解相同模型的使用,但我们假设对于桌面设备我显示新闻的 cmets 以及配置文件的图像和移动设备我只显示作者的姓名的评论。如何解决这个问题?谢谢
  • 你只是使用不同的视图。
  • 但是我将不会使用从数据库中获取信息的模型......这不是问题吗?
  • 好的,所以这取决于你如何理解 MVC。我将其理解为控制器与模型和视图对话。 View 可以从模型中检索信息,但不会改变模型状态。
猜你喜欢
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 2021-07-25
  • 2019-08-19
相关资源
最近更新 更多