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 --> 解决方法
这被称为“按惯例编码”或“约定优于配置”……你选择了一些需要配置的东西,然后其他所有东西都“落到了位置”.就像在/ views / shared中使用razor和_layout.cshtml一样.或者像使用剃须刀和mySpecialController与ActionResult索引和/views/mySpecial/Index.cshtml …这些只是让约会适合你的一种方式.
var变量只是使事情稍微更具可读性的简写,编译器仍然在编译时强烈地和静态地键入内容.考虑一下这里的区别: foreach (var c in Customers) { /* do stuff */ } foreach (CustomerDataItem customerDataItem in Customers) { /* do stuff */ } 正如你所看到的,第一个说“从客户那里获得一个项目c”,第二个说同样的东西,但是好主人我已经写了两行代码,而你还在输入长代码.当然,随着ReSharper的优势消失,然而……
哈日.
好的,所以这主要是挫折,但我会咬人.开始的人想要更简单的代码(BASIC,COBOL查找那些意味着什么),所以他们希望事情变得更容易和更多数学.事情正在发生变化(LINQ设置数学,高阶微积分;也见F#和Python) 所以他们会喜欢我们现在正在做的事情.远离程序代码(代数)并转向面向集合的逻辑(adv calculus).另见事件处理程序;-) 所以……说了这么多:我一直在你的鞋子里.我问过那些问题.我在大师的脚下学习.我喜欢语言的发展方向. 在你的下一生中,我希望你学习node.js.我希望你学习异步的偶数处理,我希望你能理解事物不再依赖ANSI-C了.我们在这个行业取得了很大的进步,而且情况正在好转.事情每天都在抬头.我爱我们所处的地方,我认为这对我们的行业来说是正确的. 干杯,和HTH. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |