【问题标题】:How to implement MVC into a server/client/DB application如何在服务器/客户端/数据库应用程序中实现 MVC
【发布时间】:2013-03-05 20:26:38
【问题描述】:

我正在编写一个由 gui 界面、客户端、服务器和数据库组成的应用程序。

但是,经过无数小时后,我仍然没有弄清楚如何组织这一切。

GUI 是由几个相当不同的挥杆组件构成的,所以我考虑为每个组件建立一个单独的模型。

目前信息流是这样的:

  1. 用户在 GUI 中插入一些信息。
  2. GUI 通过给控制器一个事件告诉控制器发生了什么事。
  3. 控制器将事件发送到服务器
  4. 服务器评估事件并将适当的查询发送到数据库。
  5. 然后将来自 DB 的结果附加到事件中,并发送回客户端。
  6. 控制器获取事件并使用新信息更新适当的模型
  7. 然后模型更新相应的视图。

可能的情况是用户通过 GUI 搜索条目并返回结果。

这种架构听起来是否合理?

所有不同的视图都应该有自己的模型吗?如果是,他们是否也应该有自己的控制器?如果没有,那是什么?

我考虑将整个模型发送到服务器,让服务器处理模型中的信息,然后将其发送回客户端。当客户端接收到它时,控制器确保新模型信息被附加到视图中。此解决方案消除了对单独事件类的需求,但这样做似乎不正确。

我想我要问的是按照 MVC 模式组织服务器/客户端/数据库应用程序的最佳方式是什么?

【问题讨论】:

    标签: java model-view-controller client-server


    【解决方案1】:

    最好的方法是将客户端、服务器和数据库分开。

    我的意思是,第一步是要知道客户端需要做什么,服务器需要做什么,数据库需要做什么:

    数据库:

    数据库实际上只是一个数据库,所以它无能为力

    服务器:

    在服务器中,您应该执行服务器上可能发生的所有事情:访问数据库、访问文件……

    客户:

    客户将完成其余的工作。这里需要区分“显示数据”;那将是“视图”和管理数据;那将是控制器。为了提供具有您使用“控制器”的功能的 gui,因此最后 MVC 模型仍保留在客户端中

    因此,我认为您的想法并没有您想象的那么糟糕。我正在做一个这样的项目。我们正在按照我描述的方式工作,我可以确保一切看起来都很好。一切都是分开的。可以替换服务器和客户端,而无需更改其他内容。如果我们更改数据库,只有服务器会注意到它,如果我们更改 gui 库(swt、awt、swing...),只有客户端会注意到它。服务端和客户端都可以在不同的环境中运行,并且没有人注意到这一点。

    所以如果我是你,我会按照你说的去做。试一试,你会发现它工作得很好。正如我所说,我或多或少遵循相同的工作流程,我只能说出好消息。

    【讨论】:

    • 那么,为每个不同的视图设置不同的模型,并使用单个控制器进行控制是一种合理的方式吗?
    • 我宁愿建议拥有与视图或视图组相同数量的控制器,这取决于您的架构。这样,不同的观点也将彼此隔离。整个事情的一个控制器可能只为一个类做两项工作。尝试使用继承
    猜你喜欢
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多