【问题标题】:Dynamic vs strongly typed elements动态与强类型元素
【发布时间】:2017-02-24 02:05:22
【问题描述】:

我是一名网络开发人员,目前正在使用 mvc3 razor 和 Umbraco 创建网络应用程序。我从事这项工作的时间不长,并且已经从使用动态元素转向使用强类型元素以遵循标准。

我从来没有真正得到过太多的理由,并且在网上搜索似乎很清楚,它更容易跟踪和调试集合类型变量,但我对在函数中使用它感到困惑。

例如,在使用 Umbraco Content 时,我现在切换到 1Umbraco.TypedContent1。我猜它会返回一个强类型变量,但除了调试之外还有其他好处吗?

【问题讨论】:

  • 假设您使用的是 Umbraco 7.4+,我真的可以推荐使用 Modelsbuilder。它是 Umbraco 核心的一部分,为您提供强类型属性。因此,您可以执行 Model.AliasName,而不是执行 Model.GetPropertyValue("aliasName")。这看起来很像使用动态时,但是当您正确配置visual studio时,您可以使用智能感知。 24days.in/umbraco-cms/2016/getting-started-with-modelsbuilder

标签: c# asp.net-mvc-3 umbraco


【解决方案1】:

我主要来自 PHP 和 Python 背景,但在大约 3 年前切换到 C#。切换到像 C# 这样的强类型语言的初级开发无疑是一个学习曲线。有时它会感觉过于严格,尤其是与 C# 非常严格的继承结合使用时。但是,强类型语言可以为您带来很多好处。

首先,可能最重要的是编译时错误。对于像 Python 这样的动态语言,在应用程序运行并出现运行时异常之前,没有迹象表明您使用了错误的类型。使用强类型语言,甚至不会构建应用程序,因此您通常不会在代码中遇到定时炸弹。

其次,强类型语言可以进行高度优化。通过确保每个事物始终是特定类型,编译器可以优化内存分配和实际编译的汇编代码。

第三,强类型语言鼓励良好的编程实践。虽然感觉有些限制,但强类型语言会强制您的代码采用动态语言通常缺乏的结构。当然,这并不是说不可能用动态语言编写好的代码,但这确实意味着当开发人员不关心他们应该花时间或关注细节时,动态语言可能会造成更大的损害而不是强类型的。

也就是说,C# 并非都是强类型的。即,有些可恶的 dynamic 关键字,它经常被滥用,而 MVC 几乎鼓励将动态与 ViewBag 之类的东西一起使用。虽然dynamic 可以占有一席之地,但我建议您尽可能避免使用它,因为您基本上放弃了使用强类型语言的所有好处。

还有泛型的概念。您可能在没有意识到的情况下使用泛型,但如果您觉得自己的编程受到了过度限制,您可能应该更多地研究它们并学习如何真正利用它们带来的力量。这有点像拥有动态类型,但它仍然是在编译时设置的,因此您不会失去任何带来的好处。

【讨论】:

    【解决方案2】:

    除了 Chris 提到的内容之外,还有性能优势,因为 Umbraco 中的动态 API 比强类型 API 慢。

    【讨论】:

    • 很高兴知道:)
    【解决方案3】:

    此外,Umbraco v8 中将删除动态类型:http://issues.umbraco.org/issue/U4-8626

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 2013-10-14
      • 2010-12-05
      • 1970-01-01
      • 2010-10-08
      • 2019-03-29
      • 2020-02-19
      相关资源
      最近更新 更多