在强类型的世界中,为什么不使用ASP ?NET MVC'对命名约定的脆弱依赖是不受欢迎的

本文关键字:命名约定 脆弱 不受欢迎 依赖 MVC 世界 强类型 为什么不 ASP NET | 更新日期: 2023-09-27 18:01:26

一直以来,强类型对象都是面向对象编程的基础。快进到5分钟前,当使用实体框架和MVC3时,我被迫将此添加到我的Web.config:

<connectionStrings>
    <add name="_MY_EXACT_CLASS_NAME_DbContext" connectionString="Data Source=blahblah.../>
</connectionStrings>

太好了,我的整个应用程序依赖于XML属性中任意选择的名称。这真的是现代编程的样子吗?类名拼写错误是严重的错误,编译器会直接引导我们进行修复,但在本例中,我只会得到一个运行时异常消息。如果前面提到的异常信息先生心情很好,他会告诉我魔多的方向,我就会跋涉到另一座毁灭山,浪费掉调试时间,摧毁看不见的"一个打字规则所有人"。

控制器也是如此:

routes.MapRoute("BE_CAREFUL","{controller}/{action}/{id}",
            new { controller = "ONE_FALSE_MOVE_AND",
            action = "BUT_I_SWEAR_IT_SAID_BUILD_SUCCEEDED" }
);

好像事情来了又去,都是一阵阵的。强类型对象曾经很受欢迎,现在我们都是匿名"var"的邻家女孩。我承认,对你的类型忸怩作态会激起很多性感的场景——尤其是知道你不需要做任何准备工作——但这是真正的问题:

面向对象编程的前辈们是如何看待我们在他们的艺术上的"进步"的呢?我们添加了一堆模糊的、什么都可以做的匿名结构,同时又在命名约定上创建了脆弱的依赖关系。

就我们所知,MVC4可能会突然要求所有的名字前面都有4.7个空格,然后是可笑的ASCII艺术。为什么?因为是的,这就是原因。花点时间,惊讶于你刚刚见证了命名惯例的诞生。显然,这是一个旗舰框架的坚实基础材料。

所以,如果我想让我的整个代码库在功能和哲学上都依赖于一个东西,那么对于编程的数学逻辑来说,没有什么比.....更重要的了微软®英语命名约定!

</sarcasm>
</griping>
<!-- resume enjoying all of MVC's amazing features, after eating any humble pie served up in the comments -->

在强类型的世界中,为什么不使用ASP ?NET MVC'对命名约定的脆弱依赖是不受欢迎的

我的整个应用程序依赖于XML属性中任意选择的名称。

这被称为"按约定编码"或"按约定优于配置"…您选择一些需要配置的东西,然后其他所有东西都"就位"。比如使用razor和_layout。/views/shared中的CSHTML。或者像使用剃刀一样,有mySpecialControllerActionResult Index/views/mySpecial/Index.cshtml…这些只是让约定为你工作的一种方式。

自那以后,强类型对象一直是面向对象编程的基础。强类型对象曾经很受欢迎,现在我们都被匿名的"var"所吸引。

var变量只是一种简写,使内容更易于阅读,编译器在编译时仍然是强静态类型。考虑这里的区别:

foreach (var c in Customers) { /* do stuff */ }
foreach (CustomerDataItem customerDataItem in Customers) { /* do stuff */ }

正如你所看到的,第一个说"从顾客那里得到一个项目c",第二个说同样的事情,但是天哪,我已经写了两行代码,而你还在输入长代码。当然,ReSharper的优势消失了,但是…

就我们所知,MVC4可能会突然要求所有的名字前面都有4.7个空格,然后是可笑的ASCII艺术。为什么?因为是的,这就是为什么。

har。

面向对象编程的前辈们是如何看待我们在他们的艺术上的"进步"的呢?我们添加了一堆模糊的、什么都可以做的匿名结构,同时又在命名约定上创建了脆弱的依赖关系。

好吧,所以这主要是沮丧,但我会咬。开始的人想要更简单的代码(BASIC, COBOL,看看这些是什么意思),所以他们想让事情更简单,更数学。这就是事情的发展方向(LINQ是集合数学和高阶微积分;(参见f#和Python)

所以他们会喜欢我们现在做的。从过程代码(代数)转向面向集合的逻辑(微积分)。另请参见事件处理程序;-)


. .说了这么多,我也曾处于你的处境。我问过这些问题。我曾拜倒在大师的脚下。我喜欢这些语言的发展方向。

在你的下辈子,我希望你学习node.js。我希望您学习异步事件处理,并且我希望您了解如何不再依赖于ANSI-C。我们在这个行业已经取得了很大的进步,事情正在好转。事情每天都在好转。我喜欢我们的现状,我认为这对我们的行业来说是正确的。

干杯,干杯。

我的回答是:"因为自动化测试的进步"。