0

好的,这是一个我能找到的问题,但支持/反对的正确论据很少。

我很欣赏这些模式为可测试性和关注点分离提供的价值。特别是在我们有某种数据存储的情况下,它可以以不同的方式呈现给用户。

但考虑一个应用程序,其中每个模型仅绑定到 1 个视图。一个例子可能是一个音频格式转换器,它可能只是一个位于 (a) 大 API(s) 后端的小 GUI。UI 只需要基本的验证(路径和格式),其余的留给后端。

在这里使用一种这样的模式的好处会证明额外的代码是合理的吗?就个人而言,我认为这是不必要的开销,但我很可能错了,因此提出了这个问题。:-)

编辑:

我在这里写的示例应用程序似乎分散了人们对问题的重点的注意力。我问MVP/MVC什么时候不好。这是Golden 4的一句话:

如果没有关于如何不使用它们的几句话,关于如何使用设计模式的讨论将是不完整的。设计模式不应随意应用。通常,它们通过引入额外的间接级别来实现灵活性和可变性,这会使设计复杂化和/或降低一些性能。只有在实际需要其提供的灵活性时,才应应用设计模式。

这就是问题的重点。我找不到关于如何不使用 [MVC/MVP] 的那几句话,所以问题就是尝试这样做。正如我上面所说,我真的很欣赏它们提供的价值,但我想知道它们什么时候是一个可怕的想法。确定没有模式是好的?

4

5 回答 5

3

在我看来,你永远不知道小 GUI 将来会变成什么样子。因此,可扩展性是最好的方法。它不仅让您编写整洁的代码,以后(例如当有人接管项目时)它会很快变得清晰。

我曾经在旅途中编写小型网站,但很快意识到这很痛苦。尤其是一年或两年后返回现场时。

于 2013-05-14T12:27:20.283 回答
1

您可能想阅读这个问题的一些答案:为什么不将 mvc 架构用于 Web 应用程序

此外,在此页面上,您可以阅读以下内容:(通过颠倒“我为什么要……”,您也可能会得到一些额外的想法)

如果 . 则选择 MVC。. .

您精通 MVC 的架构。如果您对如何设计控制器不满意,MVC 可能不是一个好的选择。您希望完全控制在浏览器中呈现的 HTML,并且您可以承担开发时间和开销来完成您自己的所有标记。您需要为您的用户界面创建有效的单元测试,而不需要整个托管运行时的开销等 - 您希望完全控制 URL 的形成方式。

如果 . 则选择 Web 表单。. .

  • 您不熟悉设计 MVC 应用程序。
  • 您需要最小化开发时间。
  • 您想要一个功能丰富的用户界面(例如 GridViews 等)来显示具有丰富交互的数据,而无需大量的开发投资。
  • 您已经投资于服务器控件,无论是来自您自己的开发还是来自第三方。

此处其他有用的解释:您不应该使用 ASP.Net MVC 如果... 以及它所说的,简而言之:

  • 你对多态性不太满意
  • 你不愿意在框架之上构建
  • 您依赖 3rd 方供应商控件来控制许多 UI
  • 你不喜欢使用开源库
于 2014-05-16T02:47:58.720 回答
1

“一个例子可能是一个音频格式转换器,它可能只是一个位于 (a) 大 API(s) 后端的小 GUI。” 这个问题来自你的这个假设。但是,可以有几个可互换的 GUI,或 IPC/RPC 接口(将其变成服务)而不是 GUI,或 TUI 等,以及几种不同的转换逻辑。此外,UI 不会验证任何内容,因为它只是为了表示数据。这样看来,MVC 模式也适用于此。

无论您拥有什么数据,数据本身总是可以与其表示分离,因此 MVC 几乎可以在任何地方使用(如果您的程序有任何类型的输出)。简单地说,MVC 模式是关注点分离设计原则的一个特定版本,应该在任何地方应用它以产生高质量的源代码。

在任何情况下,您的 UI 中都不应该有应用程序逻辑,并且您的业务逻辑中也不应该有特定于环境的代码,因此您需要在两者之间有一个层;也就是控制器。在一天结束时,无论如何你最终都会拥有一个 MVC 结构。

于 2013-05-14T12:27:42.487 回答
1

无论如何,你也可以这样做。你说你有一个小的 GUI 位于一个大的 API 上——在我看来,这是你可以拥有的最好的模式。该 GUI 现在可以是 MVC 或其他任何东西,但是,如果您将 M 作为您的服务/API,那么您就拥有了正确的重要内容。如果您的工具允许您以更多额外代码为代价快速开发界面,那么在我看来,这可能就是要走的路。至少您已经以正确的方式完成了它,并且永远不必从正确的代码中取消选择 UI。反过来更糟。

到处都有效率低下和不良做法,有些比其他更糟糕。这不是一个值得关注或脑力的问题。使用过多代码的小成本,而不是 UI 纠结的野兽的巨大成本,例如,您无法更改某物的颜色,因为它破坏了它所服务的业务场景!请记住,程序员的时间比 CPU 时间更有价值。如果您曾经考虑过 N+1 SQL,使用 Web 服务进行报告或将 1000GB 的 XML 吸入内存,然后再回来询问,但就目前而言,我认为您没问题。:)

于 2013-05-14T12:35:43.017 回答
0

如果您知道您的项目将始终保持较小并且不会随着时间的推移发生很大变化,则可以忽略许多设计模式。

但是以您为例,如果有一天您决定在 Web 应用程序或移动应用程序中使用相同的音频处理代码,而不是原来的桌面应用程序,那么如果您根据mvc.

于 2013-05-14T12:26:45.657 回答