如何在 ASP.NET MVC 中强制执行关注点分离?

Posted

技术标签:

【中文标题】如何在 ASP.NET MVC 中强制执行关注点分离?【英文标题】:How is ENFORCED the separation of concerns in ASP.NET MVC? 【发布时间】:2009-08-06 19:32:25 【问题描述】:

自 2007 年(12 月)的 Preview 1 以来,我一直在学习、使用和使用 ASP.NET MVC。自 2008 年以来我一直是它的粉丝,我一直支持它。

但是,我不断听到和阅读“ASP.NET MVC 强制执行严格的关注点分离”,包括在 Rob Conery、Scott Hanselman、Phil Haack 和 Scott Guthrie 的 Professional ASP.NET MVC 1.0 中阅读它。

我不明白的是执法。如果我用动作来定义我的控制器怎么办

return View();

在视图(aspx 视图引擎)中我什么都做? (数据获取、业务逻辑、决策制定、渲染等)

它(ASP.NET MVC)如何强制我来分离关注点?

我认为这是一种公然的夸大其词,应该写成“建议关注点分离”。

你能说服我它强制执行吗?

【问题讨论】:

致沉默的投票者:正如网站所说...“为投票提供答案” 我是沉默的反对者。我的感觉是这个问题对 Stack Overflow 没有什么价值。从您的示例中可以清楚地看出,所有逻辑都在 ASPX 页面中,“强制”可能不是文档使用的正确术语。所以,是的,你是对的。该框架不强制执行严格的分离。但我不确定为什么这是有价值的信息,或者为什么有人会关心查看 MVC 是否强制或鼓励关注点分离。感觉就像在不那么重要的事情上分道扬镳,因此我投了反对票。 word... 当然,这并不强制您分离关注点。它是您可以选择遵循或不遵循的指南或“框架”。如果我有我蹩脚的 100 分,我也会投反对票。 我希望在某个地方有一些隐藏的开关(如“strict_mode”的东西)实际上会在视图或控制器中强制执行很少的访问?好吧,我想没有它,到目前为止我得到的答案似乎指向了我。谢谢你的澄清! :) @thinkzig 你很清楚,问这个问题的人呢? 【参考方案1】:

主要是它从右脚开始 - 即单独的控制器和视图。如果你选择做一些疯狂的事情,没有人会阻止你。除了希望同行评审。和常识

但与网络表单相反,您必须非常努力来混合关注点。

【讨论】:

更不用说那些诱使你做坏事的讨厌的 SqlDataSource 控件了。【参考方案2】:

我认为它不会强制执行,所以他们可能误会了。正如您所说,“建议”或“促进”是一个更好的词。

【讨论】:

谢谢。好吧,在第 86 页由微软的 4 位主要人员撰写的“Professional ASP.NET MVC 1.0”中,第 27 行指出“MVC 模式的定义特征之一是它有助于强制执行的关注点的严格分离 在应用程序的不同组件之间。 我认为关键在于帮助执行。 我同意马特的观点,你必须不遗余力地做一些事情,比如在里面放一个 GridView。 我认为 RoR 是“有意见的”,你可能会认为它给出了一个“意见”【参考方案3】:

当然,您可以在视图中执行所有操作。你只是一个糟糕的程序员,根本不会遵循 MVC 模式。

我也很确定有些事情你不能在视图中做,只能在控制器中做。不过,我可能对 .Net 和 Rails 感到困惑。

【讨论】:

在视图中我不能做什么?这是我的问题的一部分.. 我认为 ViewState 不存在。那是你不能做的事情。 :) 这是一个毫无疑问的改进,我同意。【参考方案4】:

对于您想要的那种“强制执行”,您会建议什么机制?当 View 代码的圈复杂度超过某个阈值时,框架是否应该发出警告?框架是否应该在你的源代码上运行类似lint 的东西,并在你做非 MVC 的事情时给你一记耳光(不管是什么)?

更重要的是,所有这些摇摆不定的好处是什么?我们不是在尝试编写取悦用户的应用程序吗?

【讨论】:

看到所有新手都在编写糟糕的代码,我们中的一些人需要使用或重写,是的​​,我想要一些能打动你手腕的东西。 我问你希望如何实施拍手腕的问题的原因是,我想,是为了说明以任何有意义的方式这样做的困难。

以上是关于如何在 ASP.NET MVC 中强制执行关注点分离?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用集成身份验证在 asp net mvc 中强制重新身份验证

如何在 ASP.NET MVC 中进行分页?

ASP.NET MVC 4、Internet 应用程序模板、SimpleMembership - 帐户模型 - 强制执行唯一的用户名和电子邮件

如何对asp.net mvc 4中的select2字段进行强制字段验证

如何让任何视图知道用户角色(ASP.NET MVC 身份)已更改,以强制任何用户在浏览时注销?

在 ASP.NET MVC 中强制区分大小写路由