Model view controller MVC—是否存在it';这不是无关就是不恰当?

Model view controller MVC—是否存在it';这不是无关就是不恰当?,model-view-controller,architecture,separation-of-concerns,Model View Controller,Architecture,Separation Of Concerns,在开发具有GUI和数据库访问的应用程序时,是否存在MVC架构不相关的情况 在我看来,视图和控制器只能是不同的实体,即升级视图或用其他东西代替它们,即移动显示器(或预测应用程序未来可能发生的变化) 此外,我认为只有在升级/更换模型时才需要分离模型和控制器 那么,MVC体系结构还有什么其他用途,即组件应该升级/更改的情况,或者这真的是吗?我喜欢MVC,因为它可以更容易地考虑应用程序的不同部分将如何协同工作。如果把所有的事情都放在一起,我会发现在我的脑海里想象起来要困难得多 所以这并不是你应该何时使用

在开发具有GUI和数据库访问的应用程序时,是否存在MVC架构不相关的情况

在我看来,视图和控制器只能是不同的实体,即升级视图或用其他东西代替它们,即移动显示器(或预测应用程序未来可能发生的变化)

此外,我认为只有在升级/更换模型时才需要分离模型和控制器


那么,MVC体系结构还有什么其他用途,即组件应该升级/更改的情况,或者这真的是吗?

我喜欢MVC,因为它可以更容易地考虑应用程序的不同部分将如何协同工作。如果把所有的事情都放在一起,我会发现在我的脑海里想象起来要困难得多

所以这并不是你应该何时使用它的问题,而是你更喜欢如何思考


如果您发现不使用MVC更容易,那么您可能不应该使用MVC。

我认为,您困惑的根源在于您尝试应用MVC设计模式的范围

MVC不是小型应用程序的模式。相反,当您的自由格式OOP代码开始变得不可管理时,您应该应用它。您的代码库可能正在实现所有这些功能,但在某个时候,您将开始迷失其中

这将是您应该使用MVC的时候,因为此设计模式应用了其他约束。它不会向应用程序添加任何新内容。相反,它限制了哪些代码可以进入应用程序的哪些部分

p.S.关于MVC中的分离,您似乎也错了。基本的划分是在模型层和表示层之间。这是MVC应用程序的两个主要部分。只有在使用表示层时,视图和控制器之间才会分离。你可能会从阅读中受益


对我来说,这一切都归结为可测试性。与模型代码的测试相比,UI代码的自动测试成本过高。与视图层相比,在模型和事件控制器层中实现测试覆盖要容易得多


如果您不需要测试您的应用程序,并且它足够小,您可以在头脑中清楚地看到它,那么MVC可能是在浪费时间。很少有应用程序真正小到足以使这些问题不成问题。但如果应用程序真的那么小,MVC将增加远远超过其价值的开销。

不要将
MVC
设计模式视为您的业务架构。将
MVC
视为表示体系结构。在业务架构方面,有许多关于
MVC
使用的争论。这是一个例子

实际上,您正在寻找
N层
体系结构。其中它被分离为
DAL
BLL
PL

数据访问层(DAL):

负责与存储器交互的层(插入/更新/删除)

BLL:

业务逻辑所在的层。该层是应用程序的核心。有些人经常使用术语中间件(如果错误,请纠正我)来表示
BLL
。BLL不知道UI,这意味着它可以被桌面应用程序、web应用程序、移动应用程序等使用

PL:


这是您的表示层或UI层。MVC,至少
视图
控制器
在这里。

MVC体系结构有好处,也有一些缺点。你必须为你的项目权衡它们,看看哪一个最适合你

MVC的优势:

  • 更易于维护,因为它是分区的(独立的 关注)
  • 它更易于测试,因为您可以对控制器进行单元测试
  • 您通常对生成的HTML有更多的控制权 (是的,您可以使用webforms实现同样的功能,但前提是 同时也要充分利用webforms的所有优势)
  • 你的网页会更小更快,因为你不会 携带页面/视图/控件状态
  • 更好地与客户端生活方式和库集成 (Bootstrap、jQuery及其许多插件、AJAX等)
webforms的优势:

  • 更多第三方控件(webforms严重依赖第三方控件或自定义用户控件来实现快速应用程序开发)
  • 如果您需要viewstate,那么它需要更少的工作,但这很好 如果设计正确的话,很少见
  • 与服务器端控制库更好地集成

当然,有人会说,为什么你把xyz列为一个优势,因为你在另一个方面也可以这样做!嗯,在两个框架中都可以实现相同的功能,这只是一个简单的问题。对一方来说容易的事情对另一方来说可能更难,但如果有足够的时间和资源,两者都可以做到。

MVC是关于分离关注点,并使这些关注点可测试

有人说“MVC不是小型应用程序的模式。”。我不同意。为什么?它只规定了如何分离关注点,我不明白为什么这对于小型应用程序应该有所不同。我认为这更简单,因为每个开发人员都使用相同的模式,并且已经习惯了。这不是开销,而是一致性。还要看看你要说什么

另一件事:MVC是一种表示层模式(分离的表示),它意味着它在模型、视图和控制器中从逻辑上分离您的UI。控制器负责管理流,与后端系统交互以查询和保存数据,并将该数据转换为视图使用的模型(或视图模型)

后端本身是另一个系统,它具有