2017-02-21 19 views
1

Я веб-разработчик, который в настоящее время использует бритву mvc3 и Umbraco для создания веб-приложений. Я давно не занимаюсь этой работой и перешел от использования динамических к строго типизированным элементам, чтобы следовать стандартам.Динамические и сильно типизированные элементы

Ive никогда не получал большой причины, и поиск в Интернете кажется ясным, что его гораздо проще отслеживать и отлаживать переменные типа набора, но я смущен тем, что использую его в функциях.

Например, при использовании содержимого Umbraco я теперь переключился на 1Umbraco.TypedContent1. Я предполагаю, что он возвращает строго типизированную переменную, но есть ли другие преимущества для нее, кроме отладки?

+0

Предполагая, что вы используете Umbraco 7.4+, я действительно рекомендую использовать Modelsbuilder. Это часть ядра Umbraco и дает вам строго типизированные свойства. Поэтому вместо выполнения Model.GetPropertyValue («aliasName») вы можете сделать Model.AliasName. Это очень похоже на использование динамики, но когда вы настраиваете визуальную студию вправо, вы можете использовать intellisense. Http: // 24days.in/umbraco-cms/2016/get-started-with-modelsbuilder/ – Mark

ответ

4

Я пришел из основного языка PHP и Python, но переключился на C# около 3 лет назад. Переход к первичной разработке на строго типизированном языке, таком как C#, был, по общему признанию, кривой обучения. Время от времени он может чувствовать себя чрезмерно ограничительным, особенно в сочетании с очень жестким наследованием C#. Тем не менее, строго типизированные языки покупают вам несколько вещей.

Во-первых, и, вероятно, самое важное - ошибки времени компиляции. С динамическими языками, такими как Python, нет никаких указаний на то, что вы использовали неправильный тип до тех пор, пока приложение не будет запущено, и вы получите исключение во время выполнения. С сильно типизированным языком приложение даже не будет построено, поэтому вы, как правило, не получаете в своем коде timebombs.

Во-вторых, сильно типизированные языки могут быть высоко оптимизированы. Обеспечивая, чтобы каждая вещь всегда была конкретным типом, компилятор может оптимизировать распределение памяти и фактический скомпилированный ассемблерный код.

В-третьих, строго типизированный язык поощряет хорошие практики программирования. Хотя он может чувствовать себя несколько ограниченным, сильно типизированные языки заставляют структуру вашего кода часто не хватает в динамических языках. Это не означает, что, конечно, невозможно писать хороший код на динамическом языке, но это означает, что, когда разработчики не хотят тратить время или внимание на детали, они должны, гораздо больший ущерб может быть нанесен на динамическом языке чем тот, который строго типизирован.

Тем не менее, C# не все строго типизированы. А именно, существует несколько одиозное ключевое слово dynamic, которое часто злоупотребляет, и MVC почти поощряет использование динамики с такими вещами, как ViewBag. В то время как dynamic может иметь свое место, я бы рекомендовал избегать его как можно больше, поскольку вы по существу выбрасываете все преимущества работы на строго типизированном языке.

Существует также концепция дженериков. Вероятно, вы используете дженерики, даже не осознавая этого, но если вы слишком сильно ограничены в своем программировании, вам, вероятно, следует изучить их больше и научиться реально использовать преимущества, которые они приносят. Это немного похоже на динамический тип, но он все еще установлен во время компиляции, поэтому вы не теряете тех преимуществ, которые приносят.

+0

Очень понятный ответ, очень оцененный :) –

1

В дополнение к тому, что упоминает Крис, есть также преимущество в производительности, так как динамический API в Umbraco медленнее, чем строго типизированный.

+0

Полезно знать :) –