c# – 在一个强类型的世界中,为什么ASP.NET MVC对命名约定的脆弱依赖不受欢迎?

从永远来看,强类型对象已经成为面向对象编程的基础.快进到5分钟前,当使用Entity Framework和MVC3时,我被迫将其添加到我的Web.config中:

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

太棒了,我的整个应用程序依赖于XML属性中任意选择的名称.这真的是现代编程的样子吗?拼错一个类名是一个严重的冒犯,编译器直接引导我们修复,但在这种情况下,我只会得到一个运行时异常消息.如果上面提到的异常信息先生心情愉快,他会指着我走向Mordor,我会跋涉到另一个浪费调试时间的Mount Doom来摧毁看不见的One-Typo-To-Rule-Them-All.

控制器也是如此:

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个空格,然后是lolcat ASCII art.为什么?因为是的,这就是原因.花一点时间,惊叹于你刚刚目睹命名大会诞生的事实.显然,这是一个非常坚实的基础材料,是一个旗舰框架.

所以,如果有一件事我希望我的整个代码库在功能和哲学上都依赖于,那么对于编程的数学逻辑而言,没有什么比……微软的英语命名约定更重要了!

</sarcasm>
</griping>

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

最佳答案

My entire application depends on an arbitrarily-chosen name in an XML attribute.

这被称为“按惯例编码”或“约定优于配置”……你选择了一些需要配置的东西,然后其他所有东西都“落到了位置”.就像在/ views / shared中使用razor和_layout.cshtml一样.或者像使用剃须刀和mySpecialController与ActionResult索引和/views/mySpecial/Index.cshtml …这些只是让约会适合你的一种方式.

Since forever, strongly-typed objects have been a foundation of object-oriented programming.
Strongly-typed objects had their day in the sun, and now we’re all girl-next-door over the anonymous “var”.

var变量只是使事情稍微更具可读性的简写,编译器仍然在编译时强烈地和静态地键入内容.考虑一下这里的区别:

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

正如你所看到的,第一个说“从客户那里获得一个项目c”,第二个说同样的东西,但是好主人我已经写了两行代码,而你还在输入长代码.当然,随着ReSharper的优势消失,然而……

For all we know, MVC4 might suddenly require that all names be preceded by exactly 4.7 spaces followed by lolcat ASCII art. Why? Because yes, that’s why.

哈日.

How do the forefathers of object-oriented programming feel about our “advancement” of their art by adding a bunch of wishy-washy, do-sorta-whatever anonymous constructs while at the same time creating fragile dependencies on naming conventions?

好的,所以这主要是挫折,但我会咬人.开始的人想要更简单的代码(BASIC,COBOL查找那些意味着什么),所以他们希望事情变得更容易和更多数学.事情正在发生变化(LINQ设置数学,高阶微积分;也见F#和Python)

所以他们会喜欢我们现在正在做的事情.远离程序代码(代数)并转向面向集合的逻辑(adv calculus).另见事件处理程序;-)

所以……说了这么多:我一直在你的鞋子里.我问过那些问题.我在大师的脚下学习.我喜欢语言的发展方向.

在你的下一生中,我希望你学习node.js.我希望你学习异步的偶数处理,我希望你能理解事物不再依赖ANSI-C了.我们在这个行业取得了很大的进步,而且情况正在好转.事情每天都在抬头.我爱我们所处的地方,我认为这对我们的行业来说是正确的.

干杯,和HTH.

点赞