【问题标题】:In client side MVC, who should handle client-server communication?在客户端 MVC 中,谁应该处理客户端-服务器通信?
【发布时间】:2013-05-30 06:16:05
【问题描述】:

我正在开发客户端/服务器产品。基本上,服务器会将文档传输到客户端进行编辑。客户端具有完整的 MVC 架构。文件就是模型。

现在的问题是:

  1. 模型中有一些计算需要服务器中的一些资源。
  2. 出于性能原因,模型的某些部分应该延迟加载。

一个例子是文档中的图像。打开文档时它没有加载,但是有一些东西会加载图像,一旦加载它就会让文档知道并且文档会重新计算布局。

我的问题是通信代码是模型还是控制器的一部分?或者它属于某个既不是模型也不是控制器的上下文?还是上下文属于模型?

【问题讨论】:

    标签: web-services model-view-controller architecture


    【解决方案1】:

    模型层应该与数据源交互。在客户端-服务器设置的情况下,您有两个独立的三元组,客户端模型层的数据源将是服务器的表示层。

    基本上,您客户端的模型层成为服务器端的user

    【讨论】:

      【解决方案2】:

      如果能提供一些计算示例或文档对象模型就更好了。

      让我们突破需求:

      1. 模型中有一些计算需要服务器中的一些资源。

        这种计算最好放在Model,因为它需要来自服务器的资源。如果你把逻辑放在Controller上,那么:

        • Controller 需要访问服务器(数据库),这违反了 MVC 规则。另一件事是,控制器现在知道连接(字符串或物理文件存储)。如果您添加另一个适配器/网桥,则需要额外的努力
        • 该计算不能应用于其他 UI 实现。说在.Net中,你把它放在Asp.Net MVC中并在Controller处添加计算。如果有时您需要支持桌面 UI,则无法按原样使用计算(因为已经被控制器操作污染,添加了无用的 Web 依赖等)
      2. 出于性能原因,模型的某些部分应该延迟加载。

        我不确定您的目标。但是让我们经历一下。我假设您有 Header 模型,其中 ListDetails 需要延迟加载。这可以通过2种方法来实现。

        第一种方法是在Details 属性上实现延迟加载,第二种方法是检索由特定Header 或id 给出的Details 列表,从存储库中检索。他们俩的结果都是一样的。恕我直言,我更喜欢第二个,因为通过以后的解决方案,您可以在其他模块中重用存储库,并使您能够选择 Details 而无需特定的 Header。展示位置,我认为应该在Model

      我可能误解了这个要求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-26
        • 2011-09-05
        • 2012-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        相关资源
        最近更新 更多