2017-02-21 40 views
1

我是一位Web开发人员,他正在使用mvc3剃须刀和Umbraco来创建Web应用程序。我从未参加这项工作很长时间,并且已经从使用动态到强类型的元素来遵循标准。动态与强类型元素

我从来没有真正被给过很多的理由,并在网上搜索似乎很清楚,它更容易跟踪和调试设置类型变量,但我很困惑在功能中使用它。

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

+0

假设你正在使用一把umbraco 7.4+,我真的可以推荐使用Modelsbuilder。它是Umbraco核心的一部分,并为您提供强有力的键入属性。因此,而不是做Model.GetPropertyValue(“aliasName”),你可以做Model.AliasName。这看起来很像使用动态,但是当你配置visual studio的权利,你可以使用intellisense。 HTTP://24天。in/umbraco-cms/2016/Getting-started-with-modelsbuilder/ – Mark

回答

4

我主要来自PHP和Python背景,但在3年前转向C#。切换到像C#这样的强类型语言的初级开发当然是一种学习曲线。有时它可能会感觉过于严格,尤其是与C#的非常严格的继承结合在一起时。然而,强类型语言会为您提供很多东西。

首先,也许最重要的是编译时错误。对于像Python这样的动态语言,没有迹象表明在应用程序运行之前您使用了错误的类型,并且您得到了运行时异常。使用强类型语言,应用程序甚至不会构建,因此您通常不会在代码中使用timebombs。其次,强类型语言可以高度优化。通过确保每个东西总是一个特定的类型,编译器可以优化内存分配和实际编译的汇编代码。

第三,强类型语言鼓励良好的编程实践。虽然它可能会受到某种程度的限制,但强类型语言会强制使用动态语言通常缺乏的代码结构。当然,这并不是说用动态语言编写好的代码是不可能的,但是这确实意味着当开发人员不在意花时间或注意细节时,应该用动态语言完成更多的破坏比强类型的强。

也就是说,C#不是全部强类型的。也就是说,有一些令人讨厌的dynamic关键字,这被滥用得非常频繁,而且MVC几乎鼓励使用类似ViewBag之类的动态。虽然dynamic可以有其位置,但我建议尽可能避免它,因为您基本上抛弃了使用强类型语言工作的所有好处。

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

+0

非常明确的答案,非常感谢:) –

1

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

+0

很高兴知道:) –