Результати пошуку
ITVDN: курси програмування
Відеокурси з
програмування
Підписка

300+ курсів за популярними IT-напрямками

Вибери свою IT спеціальність

Підписка
Підписка

300+ курсів за популярними IT-напрямками

Результати пошуку за запитом: mvc
Angular vs React - що крутіше?

Автор: Dominik T

Angular – технология с полным набором инструментов и к тому же с лучшими вариантами подхода к решению. Кому-то он подходит, а кому-то – нет. С другой стороны, React – небольшая технология, которая необходима вам только при создании какого-то приложения.  Обе технологии имеют свои достоинства и недостатки. Какая из них подойдёт вам больше? Попытаемся выяснить в этой статье. Технологии Вот основные технологии, о которых я буду говорить: Angular React Vue Кривая обучения Допустим, вы знаете JavaScript + ES2015 достаточно хорошо. Какую следующую технологию будет проще выучить? Vue – наилучший выбор, если вы ищите легкости в процессе изучения технологии. React – менее абстрактный, тем не менее, вам понадобится больше времени, чтобы изучить best practices, так как есть много вариантов написать одно и то же или ошибиться. А вот после изучения Angular вы также будете знать всё, что связанно с ним (typescript, MVC…). Angular - большая технология и учить придётся долго.   Масштабируемость Angular - легко масштабируемый благодаря своему дизайну, который так же хорош, как и мощная командная строка. React требует больше проверок и поэтому более масштабируемый, чем Vue и, я думаю, что частично это правда. Vue идёт сразу после React. Он хорош, однако ему не хватает лучших практик масштабируемости, из-за чего вы получаете очень запутанный код. Совместимость с другими технологиями React. Несмотря на то, что он не работает с DOM-деревом, он основан на чистой JavaScript логикe и популярeн настолько, что содeржит в сeбe альтeрнативы библиотeкам, работающим с DOM. Vue прекрасно работает как с ДОМ-деревом, так и с JavaScript. Второе место занимает лишь потому, что у него меньше библиотек, которые могли бы быть действительно полезны для обоих (как для ДОМ, так и для JavaScript). Angular мог бы быть лучше, если бы не typescript, который требует строгой типизации.   Инструменты React, Angular and Vue. Все перечисленные технологии имеют отличные CLI и работают с любым инструментом по типу webpack. Пользователи и популярность React точно стал наиболее популярным в 2016, когда его стали использовать англоговорящие frontend и full stack разработчики. React – хороший выбор для мобильных и даже десктопных приложений на JavaScript. Vue и Angular. Vue – потому что он очень быстро развивается. Angular – потому что он создан Google, а его предшественник Angular 1 был когда-то очень популярен. Востребованность React и Angular. В зависимости от того, где вы находитесь, зависит, какая технология будет доминировать. Angular больше используют в Азии, особенно в Индии, а React – в англоязычных странах, таких как US и UK. Vue менее популярен и не поддерживается большими компаниями, поэтому остальные отдают предпочтение Angular и React. Производительность По этому параметру не ставлю ранги, так как все они сопоставимы. Возможно, React станет немного быстрее, когда полностью будет поддерживать Fiber, но сейчас существует только бета-версия. Перспективы для компаний Angular имеет open source лицензию. Он поддерживается Google, что, возможно, делает его лучшим выбором для компании, и разница между проектами Angular невелика.    React был бы очень хорошим выбором, если бы не лицензия с патентом. Однако, существуют бесплатные альтернативы, которые работают также, как и React. Например, Infernojs или мой любимый rax. Vue – не дитя большой компании, это очень успешный сторонний проект одного человека. Компании часто игнорируют его, хотя, возможно, и не стоило бы. Вне сети Рендеринг –  как раз то, о чем можно много говорить. Все технологии способны осуществлять его, но некоторые справляются лучше, чем другие. React – лучший выбор благодаря react native, alibaba rax, reactWindows и next.js. Vue подойдёт vue-разработчикам, которые предпочитают разработку под мобильные устройства. Спасибо за это alibaba weex. У Angular есть ionic 2 и nativescript, но эти технологии не позволяют достичь производительности react native. Простота и длина кода Vue имеет предварительно встроенные привязки данных и MVC модель, его легче настроить, нежели Angular и React. React пугающе прост для понимания, но нужно реально много времени, чтобы настроить react project. Angular совсем непростой. Эта сложность вызывает много путаницы 3rd party libraries и синтаксиса. Время разработки Vue, безусловно, лёгок в установке и не требует много изменений или синтаксиса, за что его и любят. Он был создан для борьбы с утомительной работой. React настраивается дольше, но после начала работы над приложением будет легко добавлять новые фичи. Angular хоть и является весьма конкурентоспособным, но количество ненужного синтаксиса, который он требует для работы простых вещей, отбрасывает его на последнее место. Размер Vue - наименьший и много в себе содержит. Вы можете подумать, что это не имеет значения, но если речь пойдёт о дешёвом Android 3G смартфоне, то вы уже не будете так уверены. React - больше чем Vue, но все же меньше, чем Angular. Angular - больше всех предыдущих, что вызывает увеличение времени загрузки и проблемы производительности на мобильных устройствах. Будущее Вот лично мои прогнозы для этих технологий на 2017 год: Vue будет приобретать популярность и всё большее количество разработчиков переключится на него. Вполне вероятно, что это может заставить крупные компании продвигать и поощрять Vue. Команда React представит Fiber  и сделает React быстрее, чем Vue и Angular. Создатели Angular попытаются привлечь больше людей, но, скорее всего, им это не удастся. Так что же лучше для вас? Подводя итог, можно сказать, что нет идеального решения, и никогда не будет. Тем не менее, вот полезные советы, которые помогут вам сделать выбор: Если вы разработчик «до мозга костей», тогда попробуйте все и выбирайте между Vue или React, доверяйте своему чувству. Если вы новичок в разработке, выбирайте или Vue, или React. Angular подойдёт компаниям с большими командами. Google -> Angular. Если любите простоту, тогда выбирайте Vue. Если нравится использовать шаблоны, тогда выбор стоит между Vue или Angular. Если предпочитаете JavaScript и JSX, попробуйте поработать с каждой технологией. Если вы работаете с Typescript, используйте Angular или Vue. Выбирайте подходящую технологию поскорее, не стоит пребывать в неопределённости. Я сомневался несколько месяцев, и это было невесело. Я решил пожертвовать популярностью и выбрал то, что считал для себя наилучшим вариантом – Vue. Ютубер funfunfunction сказал лучшее, что я когда-либо слышал про JS framework fatigue: «Существует точка в вашей карьере программиста, когда вы понимаете, что это не лучший инструмент». Здесь нет правильного или неправильного выбора, его просто необходимо сделать. Так что, продолжайте учиться и исследовать. Все будет учить Вас чему-то новому. Оригинал статьи на английском языке. 
Що повинен знати Java розробник у 2020 році?

Автор: Влад Сверчков

Язык программирования Java и ООП Алгоритмы и структуры данных Шаблоны проектирования Язык запросов SQL Технологии JDBC & Hibernate Java Enterprise Edition и фреймворк Spring MVC SOLID Модульное тестирование Git & GitHub Scrum Английский язык Выводы   Мы вновь приветствуем вас, друзья! На этот раз в нашей рубрике “Что должен знать разработчик...” под прицелом оказался такой многофункциональный язык программирования, как Java. В современном IT-рынке область веб-разработки является очень популярной, поэтому сегодня вы узнаете, каким стеком технологий должен обладать потенциальный соискатель вакансии Java веб-разработчика. Не будем медлить - начинаем!   Язык программирования Java (“Джава”) Опираясь на данные Stack Overflow Developer Survey (около 90 000 опрошенных респондентов), можно сказать, что язык Java входит в пятерку самых популярных. Это универсальный объектно-ориентированный язык программирования, который используется в создании различного информационного продукта: веб-приложений (серверной части); мобильных приложений под Android; облачных хранилищ данных; настольных приложений; компьютерных игр; программного обеспечения для банковских систем и т. д. Java был создан компанией Sun Microsystems в 1995 году. Он достаточно быстро завоевал популярность среди программистов и стал использоваться в создании клиентских приложений и серверного программного обеспечения. Java-приложения транслируются в специальный байт-код, выполняемый виртуальной машиной JVM (Java Virtual Machine), которая может быть установлена практически на любое устройство. Это делает программы, разработанные на Java, кроссплатформенными.    Что конкретно необходимо знать? Языком Java следует владеть на достаточно хорошем уровне, поэтому и список необходимых для освоения тем будет немаленьким.  Среди обязательных базовых разделов: машинная математика, переменные и типы данных, условные конструкции, логические операции, циклические конструкции, методы, рекурсия, массивы, объекты и классы, списки, обработка исключений, суперкласс Object, обобщения (Generics), работа с памятью. Далее идут более продвинутые темы: коллекции, карты (Map), основы вывода (IO, NIO), методы работы со строками (String, StringBuilder, StringBuffer), регулярные выражения, Date API, рефлексия, ClassLoader, аннотации, Javadoc, VarArgs, сериализация, клонирование, потоки и интерфейс Runnable, лямбда выражения, Stream API. Стоит знать, что совокупность вышеперечисленных разделов Java + ООП парадигмы в среде джавистов именуется Java Core (от англ. “core” - ядро). Дабы закрепить знания и не лишиться полученных навыков написания кода мы советуем вам как можно чаще практиковаться и решать прикладные задачки из интернета либо составленные самолично. Также советуем использовать онлайн-тренажеры, например, интерактивный тренажер от ITVDN. С его помощью вы сможете потренироваться в кодинге на Java и проверить свои знания.   Объектно-ориентированное программирование (ООП) Объектно-ориентированное программирование - это методология разработки программного обеспечения, в основе которой лежат четыре главных принципа: абстракция, инкапсуляция, наследование и полиморфизм. Поскольку Java является объектно-ориентированным языком, необходимость изучения и полного понимания ООП парадигм обязательно. Однако, есть и приятная новость: все принципы быстро и легко усваиваются во время изучения Java.   Алгоритмы и структуры данных Понимание алгоритмов и структур данных  - обязательное требование для любого программиста. Это необходимый фундамент, благодаря которому разработчик обучается написанию хорошего исходного кода путем подбора оптимальных формы представления информации и последовательности действий. Изучив структуры данных, вы сможете управлять сложностью своих программ, делая их более доступными для понимания, а также разрабатывать высокопроизводительные приложения, которые будут рациональнее работать с памятью. Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач на Java.   Шаблоны проектирования Паттерны (они же шаблоны) представляют собой архитектурные конструкции, которые описывают типичные способы решения распространенных задач, возникающих в ходе проектирования программного обеспечения. Всего существует более двух десятков шаблонов, однако виртуозно ими владеть должен архитектор ПО, а не рядовой разработчик. Обычно в одном проекте используется небольшое количество паттернов, поэтому вам достаточно знать лишь самые популярные из них.   SQL Structured Query Language - декларативный язык структурированных запросов, который создан для взаимодействия с базами данных. Особенность SQL состоит в том, что он лишь описывает необходимые компоненты и желаемые результаты, не указывая, как именно эти результаты должны быть получены. Каждый программный продукт подразумевает работу с данными, будь то обыкновенная процедура приема данных от сервера (например, скачивание файлов) или внесение в БД информации о новом зарегистрированном пользователе - умение работать с данными одинаково важно во всех сферах разработки, разве что за исключением FrontEnd. Также изучите одну из систем управления базами данных (СУБД). Это может быть  MySQL либо PostgreSQL. Их главное отличие от SQL в том, что SQL - это язык запросов, а MySQL/PostgreSQL - реализации СУБД, имеющие свой диалект языка SQL.   XML Extensible Markup Language - расширяемый язык разметки, с помощью которого можно структурировать данные для удобства их дальнейшей обработки. Прежде всего нацелен на использование в интернет среде и являет собой формат хранения и передачи данных на сервер. XML хорошо масштабируем, сочетает в себе простой и удобный синтаксис, а также базируется на кодировках Юникод для представления содержания документов.   JDBC & Hibernate Java Database Connectivity - это стандарт взаимодействия Java-приложений с различными СУБД. Простыми словами, JDBC имеет единый интерфейс, позволяющий любой Java-программе работать с любой базой данных одинаковыми методами. Для реализации этого универсального взаимодействия применяются специальные драйвера (не те, которые мы привыкли устанавливать на наши компьютеры). Как результат - программа никак не меняется от переключения с одной базы данных на другую, что дает JDBC весомую значимость в Java разработке. Hibernate - это ORM (от англ. “Object-Relational Mapping” - объектно-реляционное отображение) фреймворк, главная задача которого отображение объектно-ориентированной модели данных в традиционные реляционные базы данных, то есть, связывание ООП с реляционной БД. Представляет собой программное обеспечение с открытым исходным кодом.   Java EE / Spring Java Enterprise Edition - это платформа для создания корпоративных решений с помощью языка Java. Чаще всего на ней разрабатывают различные веб-приложения и веб-сервисы. Java EE включает в себя множество спецификаций (JSP, EJB, CDI, JPA, Servlet и прочие), главная задача которых состоит в обеспечении масштабируемости приложений и целостности данных во время работы системы. Spring - популярный фреймворк с открытым исходным кодом, который используют для создания веб-приложений на Java. Он дает Java-разработчикам большую свободу в проектировании приложений, предоставляя средства решения проблем корпоративного масштаба. Является альтернативой Java EE в создании веб-сервисов. Spring имеет обширную документацию и достаточно прост в использовании. Максимальной популярностью на данный момент пользуется именно Spring. Его лучше всего выбирать при создании небольших приложений или программ с микросервисной архитектурой. Java EE больше подходит для разработки легко масштабируемых монолитных приложений.   MVC (Model-View-Controller) Архитектурный шаблон, который предусматривает разделение приложения на три компонента: Модель, Представление, Контроллер, что способствует реализации концепции распределения и закрепления ответственности за каждым компонентом. Данный подход позволяет упростить и ускорить разработку проектов, благодаря чему паттерн MVC широко применяется множеством разработчиков. Java EE и Spring имеют специальные MVC-надстройки, которые обеспечивают удобное использование данного шаблона.   Scala (опционально) Строго типизированный мультипарадигмальный язык программирования. Одной из его особенностей является комбинирование стандартного ООП подхода с функциональным программированием. Scala, как правило, применяется в мощных системах с большим объемом данных и внушительным количеством пользователей. Данный язык программирования подходит для машинного обучения и анализа данных. Scala не является обязательной к изучению для Java программистов. Однако, ее знание будет огромным плюсом на собеседовании. В дальнейшем вы сможете переквалифицироваться в полноценного Scala разработчика, имея необходимый бэкграунд, полученный во время Java разработки.   SOLID Акроним, который обозначает пять основных принципов объектно-ориентированного программирования. Следование стандарту SOLID позволяет создавать легко поддерживаемые и масштабируемые проекты с удобной архитектурой и минимальным количеством “запахов кода”. Также знание данных принципов показывает грамотность разработчика, уровень его профессионализма. Это безусловно сыграет вам на руку на собеседовании.    Unit тестирование Тот самый тип тестирования, который берет на себя не тестировщик, а сам программист. Идея - в написании тестов под каждую нетривиальную функцию либо метод. Цель модульного тестирования — изолировать отдельные части программы и показать, что по отдельности они являются работоспособными. Таким образом происходит проверка кода на регрессию и соответствующее обнаружение ошибок.   Git & GitHub Git - наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. В роли главного конкурента Git выступает SVN (централизованная система, в отличие от Git). Помимо этого, стоит уметь работать с сервисом онлайн-хостинга проектов, использующих систему контроля версий. В данном случае это GitHub. В тандеме с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах. Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы.   Scrum Методология ведения разработки программного обеспечения, которая относится к семейству гибких (Agile). Исповедует командный подход к созданию ПО, короткие итерации, частые выпуски новых версий продукта, учет изменений и непрерывное улучшение в процессе работы. Scrum применяется не только в IT, но и в производстве, маркетинге, консалтинге и прочих сферах. Множество команд разработки ПО успешно применяют данную методологию, поэтому ее важность сложно переоценить.   Английский язык Знание английского языка - естественное требование для каждого разработчика в IT, поскольку большинство новых сведений о технологиях, курсы, учебные и справочные материалы появляются в первую очередь на английском. Для работы в команде разработчиков обычно знаний языка на уровне чтения технической документации и комментирования кода вполне достаточно, однако если вы планируете самостоятельно вести переговоры и переписку с иностранным заказчиком, ваш уровень должен быть выше.   Выводы Таким образом мы с вами рассмотрели основные технологии, которыми должен владеть кандидат, стремящийся занять должность Java разработчика. Сам Java уже много лет прочно удерживает высокие позиции во всевозможных рейтингах языков программирования и покидать свой пьедестал не собирается, о чем свидетельствуют следующие статистики: dou.ua (Украина), tiobe.com (Tiobe - нидерландская компания, которая занимается оценкой качества программного обеспечения),  вышеупомянутый Stack Overflow Developer Survey и другие информационные ресурсы. Несмотря на то, что в статье мы была затронута именно путь веб-разработчика на Java, данный язык успешно применяется в разработке Android-приложений (Kotlin и Objective-C), разработке объемных программных систем; также на нем можно писать настольные игры (хотя он не имеет таких инструментов создания игр, как у платформы .NET). Java достаточно универсален и способен на практически все что угодно в руках умелого программиста. А таковым вы можете стать с помощью наших курсов, направленных на интенсивное изучение языка Java. Программа обучения предлагает 23 видео курса общей продолжительностью более 160 часов. Также ITVDN предоставляет интерактивный тренажер, с помощью которого можно отточить навыки написания кода на различных языках, в том числе и на Java.   Если вам понравилась эта статья, поделитесь информацией с теми, кому она может быть интересна. Пишите в комментариях, на какие еще вопросы, связанные с выбором специальности и планированием обучения вы хотите получить ответы. Мы постараемся ответить на них в наших новых обзорах.
Оновлення для ASP.NET vNext, .NET Native та RyuJIT

Автор: Редакция ITVDN

Введение В августе 2014 года были обновлены продукты, работающие на .NET, а именно: ASP.NET vNext, .NET Native и RyuJIT. ASP.NET vNext ASP.NET vNext - обновленная версия ASP.NET, используемая для создания клиент-серверных приложений. Разработчики продолжают добавлять новые функции и улучшают разработку ASP.NET vNext приложений, написанных в Visual Studio 14. Список преимуществ, почему ASP.NET vNext лучше выбирать в качестве веб-платформы: Единое и улучшенное API для MVC и Web API. Значительно улучшена производительность при запуске и пропускная способность. Полная поддержка .NET Framework. Компоненты ASP.NET vNext не надо регистрировать, потому что конфигурационные сведения уже встроены. Поддерживает работу с Mono на Mac и Linux Новые функции Минимальный Формат Проекта «Minimal Project Format» Формат проекта ASP.NET (kjproj) также был обновлен. Новый функционал теперь будет влиять на работу внутри проекта Visual Studio: Легкий контроль всех исходников, так как kproj не будет изменятся при добавлении, перемещении или переименовании файла. Улучшенный опыт использования командной строки Visual Studio и ASP.NET, поскольку среда разработки не нуждается в списке файлов. Это хорошо работает, когда над проектом работают один-два человека. Поддержка Модульного Тестирования «Unit Testing Support» Была добавлена базовая поддержка для модульного тестирования, теперь можно использовать любой фреймворк для тестирования. Разработчиками создана первоначальная поддержка xUnit, работающая в рамках текущего Visual Studio Test Explorer. Скаффолдинг «Scaffolding» ASP.NET Scaffolding – это фреймворк для генерации кода, используемый в ASP.NET веб приложениях. Его использование позволяет сократить время разработки конфигурационных файлов для приложений. Новая версия позволяет добавить первоначальную поддержку фреймворка в ASP.NET vNext, а также создавать собственный скаффолдинг для генерации контента. Обновленный домашний репозиторий «Update Home Repo» “Home Repo” – Ваш репозиторий на Github для командной строки ASP.NET vNext. В новой версии были добавлены: новая документация, примеры и скрипты. Теперь имеются простые ASP.NET vNext примеры “Home Repo” для проверки работоспособности вашей программной среды. .NET Native Обновление .NET Native включает в себя лимитированную поддержку “Windows Communication Foundation” (WCF). Так же были добавлены новые свойства для WCF: CustomBinding BasicHttpBinding HttpTransportBindingElement TextMessageEncodingBindingElement ChannelFactory ClientBase DataContractSerializer RyuJIT – Новое поколение JIT компиляторов В JIT компиляторе RyuJIT обновилась исполняющая библиотека CoreCLR. Библиотека SIMD на данный момент не поддерживается, но разработчики обещают ее добавить в следующих релизах. Подробнее про компилятор RyuJIT Вы можете узнать на ресурсе: blogs.msdn.com/b/dotnet/archive/2013/09/30/ryujit-the-next-generation-jit-compiler.aspx Ознакомиться со всеми обновленными продуктами можно в Visual Studio 2014 или Visual Studio 2015 Preview. Источник: blog.msdn.com
.NET Core та C# - технології, за якими майбутнє

Автор: Редакция ITVDN

Я работал с .NET Core около года и сейчас могу сказать, что был очень впечатлен. Поскольку наша компания создает приложения для разработчиков, которые базируются на .NET Core, я ощущаю нас причастными к тому, что сейчас происходит. Каждый день мы общаемся с клиентами, которые уже используют .NET Core в своих разработках. .NET Core быстро завоевывает популярность, и я уже предсказываю огромную потребность в разработчиках на C# и .NET Core в 2018 году. Согласно индексу программирования TIOBE, C# уже входит в пятерку наиболее популярных языков программирования. 6 вещей, которые стоит знать о C# и .NET Core Узнайте, почему .NET Core возводит C# в топ списка наиболее популярных языков программирования. 1) Простота в изучении Если вы уже работали с С, Java или даже JavaScript, синтаксис C# покажется Вам довольно знакомым. Сам синтаксис достаточно прост в понимании и чтении. Исходя из индекса TIOBE, приведенного выше, уже сейчас большинство разработчиков могут легко перейти с Java или C. В сети существует много онлайн-ресурсов для изучения C#. Большинство из них – бесплатные, другие же можно использовать за умеренную плату. Pluralsight – Отличный обучающий контент за доступную цену Microsoft Virtual Academy – Бесплатные видео и оценивание Microsoft Getting Started with C# - Бесплатные интерактивные туториалы 2) Современные возможности языка .NET существует на протяжении длительного времени и за последние 15 лет достаточно сильно преобразился и улучшился. На протяжении лет я отмечал такие прекрасные нововведения как MVC, обобщения, LINQ, async/await операторы и многое другое. Как человеку, который лично посвятил себя изучению языка, я рад наблюдать, как он модернизируется. Многое претерпело изменения с появлением .NET Core. Взять тому примером стек технологий ASP.NET. Все эти 15 лет язык C# был с нами, и он продолжает совершенствоваться. Вот некоторые наиболее примечательные особенности: Строгая типизация Качественные библиотеки классов Асинхронное программирование – шаблон async/await Сборка мусора, автоматическое управление памятью LINQ – интегрированный язык запросов Обобщения – примером List<T>, Dictionary<T, T> Управление пакетами Общие бинарные файлы для разных платформ и фреймворков Простота в использовании фреймворков для создания MVC веб-приложений и REST API. 3) Универсальность: веб, мобильные, серверные, настольные приложения Одним из наиболее значимых плюсов C# в частности и .NET в целом, я считаю, является его многогранность. Я могу писать программы для ПК, вести веб-разработку, создавать фоновые сервисы или даже мобильные приложения (спасибо Xamarin!). Кроме того, все, что мне нужно знать, дабы скомпоновать все UI-коды вместе (чего я все же стараюсь избегать), это, кроме C#, всего лишь немного JavaScript’а (+ TypeScript). Шаблоны ASP.NET Core в свою очередь при создании клиентских библиотек даже используют макеты Бутстрапа и npm. Универсальность языка - довольно весомый плюс, так как ваш вклад в его изучение может найти применение в широком спектре возможностей. Ваши навыки очень мультиплатформенные. Если пожелаете, Вы можете легко «перескочить» с разработки веб-приложений на мобильные. Пожалуй, это уникальное отличие от других языков, заточенных только под серверную часть. Не стоит забывать о первоклассной поддержке Microsoft Azure. Нужно задеплоить проект на облако? Нет ничего проще: сия операция осуществляется всего лишь в пару кликов. Поддержка Docker-контейнеров также присутствует, что значительно упрощает деплой приложений на AWS или другие хостинги на Ваше усмотрение. 4) Качественные инструменты разработчика Visual Studio всегда считалась одной из лучших сред разработки. Это прекрасный редактор кода, поддерживающий такие фичи, как компиляцию, отладку, профилирование, git-репозиторий, юнит-тестирование и многое другое. Плюс, за вами всегда остается возможность писать коды для .NET Core в любом текстовом редакторе в виде обычных текстовых файлов. Вы также можете использовать Visual Studio Code на любой ОС в качестве отличного редактора кода. Даже те из нас, кто никогда не желает расставаться с этим Vim или Emacs, могут вести разработку на C#. Можно также установить плагины для Visual Studio и добавлять свои «горячие клавиши». Вся экосистема .NET изобилует прекрасными инструментами. К примеру, вряд ли я смогу представить жизнь без Resharper`а или JetBrains. Существуют десятки классных инструментов, включая смеси открытого кода и коммерческих продуктов. 5) Обобщение навыков .NET обладает очень хорошим набором базовых библиотек. В отличие от Node.js, такие простые строковые функции, как LeftPad(), уже встроены. Подобное разнообразие стандартных библиотек значительно уменьшает потребность в сторонних пакетах. Также благодаря вмешательству Microsoft, мы можем использовать такие технологии, как JSON.NET и прочее. Microsoft обеспечивает качественный набор шаблонов и их реализаций на .NET. К примеру, сервис для работы с данными (Entity Framework) и MVC уже встроены. Большинство разработчиков именно ими и пользуется. Подобный подход значительно упрощает взаимодействие между командами и ускоряет понимание, как проект работает. Благодаря этому, Ваши знания и навыки становятся более универсальными. 6) Код .NET Core в свободном доступе Одним из наиболее значимых событий, которое когда-либо происходило на .NET, является публикация исходного кода. Теперь каждый на GitHub’е может просматривать, вносить правки и дополнять его. Пожалуй, большинство людей даже никогда не думали о том, что подобное может когда-либо произойти. Как разработчику, время от времени Вам необходимо «заглядывать за ширму», дабы понимать, как на самом деле работает код. К примеру, раньше я мог только гадать, закрывает ли вызов метода Dispose() на базе данных соединение или нет. Если же Вы можете заглянуть в исходный код, большинство схожих вопросов отпадает. Даже если Вы не дополняете исходники, так или иначе Вы получаете пользу от тех, кто это делает. Проблемы и возможные улучшения быстро обсуждаются, реализуются и публикуются в свободный доступ. Прошли теперь те дни, когда на ожидание сколь-либо значительных улучшений или незначительных правок уходили годы. Заключение На протяжении лет я читал о программистах-полиглотах и о новых классных языках. В разное время люди писали на Ruby, Python, Scala, Go, Node.js, Swift и прочем. Приятно видеть, что Microsoft, сообщество сделали с .NET Core и как он вознесся в ранг первоклассной платформы. Я даже портировал .NET приложения на Maрc! Проблемой многих существующих языков программирования является то, что они узкоспециализированы. Ruby и PHP прекрасно подходят для веб-приложений. Swift или Objective C лучшего всего использовать для IOS или MacOS. Если нужно написать серверное приложение, можно использовать Python, Java и так далее. Пожалуй, кроме C#, только JavaScript и Java могут считаться языками широкого профиля. Мне бы было трудно применить навыки для решения различных задач, если бы я был вынужден работать со многими языками программирования. Это ограничивает возможности. Мне нравится универсальность C#, нравится то, что его можно использовать для разных типов приложений. Теперь, поскольку .NET Core так же подходит и для MacOS и Linux, больше нет никаких лимитов на его применение. Автор перевода: Евгений Лукашук Источник
Основи AngularJS на практиці

Автор: Редакция ITVDN

Введение AngularJS – фреймворк-библиотека Javascript, разработанная для создания одностраничных приложений на основе MVC (Model-View-Controller) шаблона. Будем осваивать данную технологию на практике. Создадим HTML страничку со стандартной структурой. Далее нам нужно преобразовать ее в одностраничное приложение. Для этого подключим AngularJS к своей странице, добавив в тег с данным кодом: <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> script> Следующим шагом мы явно укажем на то, что наша страница является AngularJS приложением. Нужно добавить ng-app директиву, которой мы обозначим корневой элемент приложения. Зачастую таким элементом выступает тег или же тег . Добавим эту директиву к :  <!DOCTYPE html> <html ng-app=""> <head>     <title>title>     <meta charset="utf-8">     <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">     script> head> <body> body> html> Проверим,  все ли работает, добавив небольшое выражение для подсчета произведения чисел 123 и 45. В AngularJs все выражения записываются в двойных скобках. Добавим в параграф со следующим содержимым: <p>Результат произведение чисел 123 и 45 равен : {{ 123 * 45 }}p> Запустим в браузере:  Теперь у нас есть готовый шаблон приложения, который мы будем использовать во всех последующих примерах. AngularJS позволяет разработчику легко взаимодействовать с пользовательским вводом. Для этого есть соответствующая директива ng-model, которая связывает значения HTML элементов контроля (teaxtarea, input etc.) с приложением. Использовать эти данные поможет директива ng-bind, добавив эти данные во View (элемент MVC) и отобразив их на странице. Применим полученные знания на практике. В созданный ранее шаблон добавим поле для ввода <input> с директивой ng-model и параграф для вывода данных c директивой ng-bind. Код странички: <!DOCTYPE html> <html ng-app=""> <head>     <title>title>     <meta charset="utf-8">     <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">     script> head> <body>     <p>Ввведте свое имя:p>     <input type="text" ng-model="yourName">     <p>Здравствуй, <span ng-bind="yourName">span>p> body> html> Откроем в браузере: Теперь попробуйте ввести свое имя в поле для ввода. Давайте добавим в данный пример дефолтное значение имени, к примеру Анна. Сделаем это, конечно же, с помощью директивы ng-init, которая позволяет инициализировать любую переменную AngularJS приложения. В строку  добавим директиву ng-init. <input type="text" ng-model="yourName" ng-init="yourName='Aнна'"> Посмотрим изменения в браузере: Теперь мы имеем значение по дефолту – Анна, но все так же можем изменять его: Вывод данных в этом примере можно сделать еще одним способом, а именно, использовав выражение. Заменим на {{yourName}}. <p>Здравствуй, {{ yourName }}p> Открыв страницу, мы не увидим абсолютно никаких изменений, а все потому, что выражения в AngularJS связывают данные со страничкой точно так же, как и ng-bind директива. Как упоминалось в статье ранее, AngularJS строит приложения на основе MVC. Часть модель – представление (Model - View) определяется с помощью директивы ng-app. Контроллер в свою очередь определяется директивой ng-controller. Рассмотрим пример с использованием контроллера страницы. Создадим страничку со списком гостей, которых Вы пригласите на свой день рождения. К созданному ранее шаблону добавим контроллер, а так же установим имя для приложения. В тег внесем следующие изменения: <html ng-app="firstApp" ng-controller="firstController"> Далее добавим с типом text для введения имени гостя и еще один с типом submit для добавления гостя в список. Также добавим с полем для вывода списка и чекбоксом с типом checkbox для того, чтобы можно было удалять тех, кто не придет на ваш праздник. В данный добавим директиву ng-repeat, отвечающую за повторение данных в обозначенном контейнере. <!DOCTYPE html> <html> <head>     <title>title>     <meta type="utf-8">     <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">script> head> <body ng-app="firsApp" ng-controller="firstController">     <h2>Мои гости:h2>     <form ng-submit="addGuest()">         <input type="text" ng-model="guestsInput" size="50" placeholder="Введите имя гостя">         <input type="submit" value="Добавить гостя">     form>     br>     <div ng-repeat="guest in listOfGests">         <input type="checkbox" ng-model="guest.come"> <span ng-bind="guest.guestName">span>     div>     <p><button ng-click="remove()">Удалить гостя button>p> body> html> Осталось добавить скрипт, который будет содержать функции для работы с элементами нашего приложения. Замечу, что все функции будут расположены в контроллере приложения. Скопируйте и добавьте после закрывающегося тега параграфа с кнопкой <p><button ng-click="remove()">Удалить гостя button>p> следующий код: <script>         var app = angular.module('firsApp', []);         app.controller('firstController', function($scope) {             $scope.listOfGests = [{guestName:'Я любимый', come:false}];             var countOfGuests = 1;             $scope.addGuest = function() {                 $scope.listOfGests.push({guestName:$scope.guestsInput, come:false});                 $scope.guestsInput = "";                 countOfGuests++;                 checkNumberOfGuests();             };             $scope.remove = function() {                 var oldGuests = $scope.listOfGests;                 $scope.listOfGests = [];                 angular.forEach(oldGuests, function(guest) {                     if (!guest.come) $scope.listOfGests.push(guest);                     countOfGuests--;                 });                 checkNumberOfGuests()             };             function checkNumberOfGuests(){                 if(countOfGuests <= 2){                     alert("Маленькая вечеринка тоже не плохо! Не печалься! Лучших друзей не бывает много!");                 }else if(countOfGuests >= 9){                     alert("Праздник?! ВЕЧЕРИНИЩЕ!");                 }else{                     alert("Узкий круг самых близких, это всегда хорошо!");                 }             } script> В данном коде у нас есть три функции: добавление и удаление гостя и проверка количества гостей. В функции добавления мы берем введенные данные guestsInput и добавляем их в лист listOfGests. Устанавливаем значение чекбокса в false (в нашем случае, это значит, что человек придет / если значение true, то есть галочка стоит - значит не придет), после чего очищаем поле ввода. Далее увеличиваем счетчик гостей и вызываем функцию проверки их количества. В функции удаления мы берем список гостей listOfGests и проверяем значение чекбокса каждого гостя, определяя, кто придет, а кто нет. Удаляем тех, кто отмечен галочкой (не пойдет) и уменьшаем счетчик элементов. Функция проверки количества гостей очень проста, поэтому подробнее мы ее разбирать не будем. Давайте откроем пример в браузере и поработаем с ним: Добавим несколько гостей: С изменением количества гостей содержимое оповещений будет меняться. Когда вы добавите больше 9 друзей, тогда увидите такое оповещение: Поздравляем, вот Вы и создали свое первое одностраничное приложение с помощью AngularJS!
ASP.NET Core vs Node.JS

Автор: Guillaume Jacquart

Я работал с .NET-платформой на протяжении 5 лет – как в плане профессиональной необходимости в качестве бек-енд разработчика и архитектора, так и в плане определенных личных задач - таких как открытые и закрытые сторонние проекты. После нескольких лет работы с экосистемой PHP и имея солидный стаж в плане Java, я пришел к выводу, что язык C# для меня представляет, пожалуй, наибольший интерес – благодаря своему удобству и эффективности. Этот язык комплексный, тщательно продуманный и лично для меня в работе с C# лучшую среду программирования, нежели Visual Studio, человечество еще не изобрело. Более того, ASP.NET уже содержит в себе все, что необходимо веб-разработчику, не требуя установки дополнительных фрейморков и библиотек. Единственное, что меня не очень устраивало в плане .NET-системы, это ее «закрытость» и использование преимущественно Microsoft-платформы (хотя и существуют специальные Mono, которые позволяют в качестве альтернативы запускать шарп-проекты и под Linux, но достигается это ценой утраты целого ряда полезных фичей). По этой причине я обратил свое внимание на Node.JS, хотя мои коллеги называли JavaScript бесполезным языком, а Node.JS – хламом. Я был очарован однопоточной каллбэк-системой, я наслаждался, создавая REST API, используя ExpressJS. Но затем Microsoft выпустила кроссплатформенную технологию ASP.NET Core, и я призадумался, что же и когда стоит использовать. После чего я решил собрать как можно больше информации касательно возможностей и реализации тех или иных фичей двух технологий, после чего выбрал для себя, по моему мнению, наиболее удобную технологию, в рамках которой и развернул свой новый проект. Надеюсь, эта публикация вам тоже поможет прийти к определенному решению. Модель обработки запроса Node.JS Node.JS успел зарекомендовать себя как однопоточный обработчик запросов. Что это значит? Это значит, что вместо обработки каждого поступившего http-запроса внутри отдельного потока или процесса (наподобие Apache), обработка производится внутри одного потока. Подобный подход делает обработку запросов однопоточной, тогда как в Apachi\PHP обработка является многопоточной. Однако, что касательно Node.JS, здесь преимущество заключается в асинхронной работе системного ввода-вывода, которое, соответственно, не блокирует требуемый поток. Операция ввода\вывода производится в рамках отдельного потока, в то время как основной продолжает свою работу. Как только вторичный поток завершает свою работу, вызывается callback, который, соответственно, передает в контекст основного потока результат. С одной стороны, использование подобного подхода прекрасно подходит для приложений, интенсивно работающих с вводом\выводом. С другой стороны, появляется вероятность так называемого «ада обратных вызовов», который провялятся в цикличной сложности кода. Будем надеяться, что новая версия введёт в обиход полноценные async\await. Однопоточная модель обработки запросов Node.JS может быть сгруппирована при помощи использования нативной кластеризации, Nginx или PM2. ASP.NET (синхронный) Исторически так сложилось, что обработка запросов ASP.NET MVC (или Web Api) производится подобно Apache / PHP: каждый запрос обрабатывается внутри своего собственного потока пула потоков. И каждая команда ввода-вывода производится синхронно внутри каждого из потоков. В контексте жесткой работы с вводом-выводом подобный подход, конечно, менее удобный, если сравнивать со схемой Node.JS. Хвала Небесам, .NET Framework 4.5 вводит в C# async\await, что также исправляет сложившуюся ситуацию. ASP.NET Core (асинхронный) Паттерн async\await позволяет в полной мере ощутить все прелести асинхронного программирования. Действительно, теперь появилась возможность указать каждый обработчик запросов как асинхронный, благодаря чему работа с системой ввода-вывода будет производиться в контексте своего потока. Это позволит не блокировать основной поток. Подобная модель на базе Task`ов позволяет использовать обратные вызовы, ощутить все прелести асинхронности и прочее. .NET Core часто применяет паттерн async\await при интенсивной работе с системой ввода-вывода.   Async\await Node.JS VS Async\await ASP.NET Core Пример кода Node.JS для асинхронного запроса в базу данных: Пример того же кода на ASP.NET Core (фрагмент класса Startup):   Разница между двумя моделями в том, что ASP.NET Core способен обрабатывать большее количество запросов благодаря своей дефолтной параллельности. В то же время переключение между асинхронными потоками может занимать время в случае использования большого количества общих для многих потоков переменных. В такой ситуации все же Node.JS будет быстрее.   Много современных языков программирования, вроде того же C#, реализуют асинхронный ввод-вывод, который часто недооценен сообществом Node.JS-разработчиков, но который может приводить к приятным неожиданностям. В этом случае Node.JS в значительно меньшей мере технологичный, если сравнивать его с ASP.NET Core. Язык программирования Особенности и безопасность Вращаться в среде C#-разработчиков – значит выслушать множество критики в адрес динамической типизации и удивительных булевых преобразований JavaScript. Впрочем, эта критика является обоснованной, если учитывать, что JavaScript был разработан всего за 10 дней для динамического контента HTML.   С другой стороны, с того времени язык очень даже «вырос», и новая спецификация привносит такие фичи, как: Классы Новые идентификаторы (const, let), повышающие надежность кода Указательные функции Интерполяцию строк Генераторы Элементы рефлексии Впрочем, C# все равно остается намного более мощным языком программирования, ибо все вышеперечисленное – всего лишь небольшая часть того, чем может похвастаться строго-типизированный объектно-ориентированный язык программирования. Мне кажется, что для C# лучшей среды работы, нежели Visual Studio, просто не найти. Однако, если учитывать рост спроса на рынок микросервисов, большинство из особенностей подобных гигантов здесь не найдут свое применение. Изучение Если вы раньше работали с классической MVC-архитектурой, переход на Node.JS \ Express затребует некоторое время, чтобы привыкнуть. Некоторые же вещи могут вообще оказаться в новинку. Также нужно будет время для того, чтобы «переварить» событийно-ориентированную парадигму Node.JS. Что действительно может показаться запутанным впервые при работе со средними или большими приложениями, так это паттерны рефакторинга кода и, собственно говоря, архитектура кода. Так как функциональность Express.js очень гибкая, выбор «правильной» архитектуры и файловой структуры может быть затруднительным. С другой стороны, для создания качественного приложения без этого – никак. Что же касается ASP.NET (Core) MVC / WebApi, то тут уже предоставляется готовая файловая структура. Да, разработчик может применить немного «креативности» при создании бизнес-логики и слоя для работы с базой, но предопределенность архитектуры упрощает разработку. Однако, в случае с маленькими приложениями, JS-платформа более предпочтительна, так как позволяет написать сайт-визитку с использованием одного лишь js-файла и одного лишь package.json. Продуктивность Я обнаружил, что написание простого кода является более быстрым при использовании Node.JS. Причина в том, что простые приложения тут проявляют большую «гибкость». Также возникают вопросы касательно типизации языка, так как в некоторых случаях оказывается, что динамическая типизация является скорее плюсом, чем минусом. С другой стороны, я заметил, что при написании объемного кода, более читабельным он оказывается при работе с C#, чем с JavaScript. Думаю, причина этому – строгие ооп-парадигмы. Что касается отладки и юнит-тестирования, тут C# / Visual Studio также показывают лучшую продуктивность, хотя и сказать, что JavaScript совместно с Visual Studio Code пасет задних, нельзя. Время построения маленьких js-приложений также меньше. Екосистема В этом плане две технологии отличаются больше всего. Node.JS обязана своим развитием в основном сообществу, которое и разработало для неё большее количество существующих популярных библиотек. С одной стороны, вы чувствуете себя очень свободно в выборе модулей для разработки. С другой же, внезапное обновление одного из пакетов, отсутствие надлежащей проверки на ошибки и стабильность, в некоторых случаях могут легко привести к обвалу всего приложения. ASP.NET Core технология разработана проверенной командой профессионалов из Microsoft. И она предоставляет абсолютно все, что необходимо разработчику веб-приложений любых направлений. Кроме того, сторонние библиотеки также качественно выполнены и разработаны другими крупными проверенными компаниями. Один из многочисленных примеров – ORM-инструменты. Entity Framework, официальный инструментарий для работы с базой данных, предоставляет абсолютно все, что необходимо разработчику. Публикация и запуск А вот это та область, где Node.JS, без сомнения, лидирует. Технология является открытой, кросс-платформенной, поддерживает докеризацию. Это значит, что вы запросто сможете запустить свое приложение под такими платформами: На собственном Linux, Windows или Mac-сервере. Все, что для этого нужно – это движок Node.JS и реверсивный прокси-сервер (наиболее популярный – Nginx). Докер-контейнер. Большинство PaaS-провайдеров (AWS, Google App Engine, Azure, Heroku, …) Сервис Now, который позволяет провести запуск Node.JS-приложения в одну строчку без предварительной конфигурации. Также есть много подходящих CI & CD – платформ. Что же в случае ASP.NET-стека, тут все обстоит несколько печальнее. Хотя и ASP.NET Core также кросс-платформенная, количество сервисов для публикации несоизмеримо меньшее. Вот какие хостинги я знаю на данный момент: Собственный Windows-сервер с классическим IIS. Собственный Linux-сервер с реверсивным прокси. Докер-контейнер под Windows. Работает отлично, но занимает много места. Некоторые облачные сервисы PaaS. В основном, Azure, но есть также некоторые неофициальные билды Heroku. Заключение Node.JS обладает асинхронной событийно-ориентированной моделью обработки запросов, которая не очень то и уступает многопоточной async\await модели ASP.NET. Производительность Node.JS – приложений не всегда лучше, чем ASP.NET Core. Можно сказать, она даже хуже. Язык JavaScript не так уж и плох (и становится лучше!). А использование его вместе с Node.JS может дать приятный результат. ASP.NET (Core) лучше всего подходит для объемных приложений и предоставляет все необходимые разработчику инструменты высшего качества. Для микро- или среднеразмерных сервисов Node.JS предоставляет широкие возможности в плане публикации. И, как всегда, не существует одного лучшего инструмента «на все случаи жизни». Попробуйте доступные и подберите для себя тот, который лучше всего отвечает вашим требованиям. Автор перевода: Евгений Лукашук Источник
Що повинен знати C#/.NET розробник

Автор: Влад Сверчков

На сегодняшний день .NET программист может применять свои навыки в различных сферах разработки программных продуктов: создание веб-приложений и веб-сервисов создание настольных приложений; создание облачных сервисов; создание игр; создание мобильных приложений. Когда говорят о .NET разработчиках, имеют в виду программистов, которые пишут на языке С#. Этот язык программирования, как и вся платформа .NET, был создан, развивается и поддерживается компанией Microsoft, которая стабильно уже несколько десятилетий входит в TOP-10 компаний - мировых лидеров рынка информационных технологий. Все продукты компании Microsoft созданы на платформе .NET. Какие же технологии необходимо изучить, чтобы стать .NET программистом? Поскольку львиная доля .NET-вакансий приходится именно на веб-сегмент, данная статья будет охватывать как фундамент, которым обязаны владеть все разработчики этой платформы, так и основные технологии серверной стороны веб-решений.     Язык программирования C# (“си шарп”) Любой .NET разработчик не может называться и быть таковым, если он не умеет хорошо программировать на языке C#. Это универсальный объектно-ориентированный язык, который является мощным инструментом создания программного обеспечения с широкой областью применения. При столь высокой функциональности он является достаточно несложным в изучении и отлично подойдет тем, кто собирается сделать первый шаг навстречу программированию. Благодаря широкому спектру применения, С# является очень востребованным языком. Различные ресурсы по поиску работы предлагают большое количество вакансий, причем, как на крупные проекты с четко определенным консервативным стеком технологий, так и в компании, которые создают новый программный продукт с применением самых современных инструментов. Компания Microsoft активно развивает свое детище - .NET направление, потому C# всегда актуален, идет расширение функционала, добавляются новые возможности. Тенденция последних лет - кроссплатформенность, реализуемая в .NET Core. Огромное количество учебных материалов, качественная официальная документация, видео курсы и образовательные вебинары - все это создает максимально комфортные условия для грамотного поэтапного изучения данного языка.     ООП Объектно-ориентированное программирование - это методология разработки программного обеспечения, в основе которой лежат четыре главных принципа: абстракция, инкапсуляция, наследование и полиморфизм. Поскольку C# является объектно-ориентированным языком, необходимость изучения и полного понимания ООП парадигм обязательно. Однако, есть и приятная новость: все принципы быстро и легко усваиваются во время изучения C#.      Алгоритмы и структуры данных Понимание алгоритмов и структур данных  - обязательные знания для любого программиста. Изучив структуры данных, вы сможете управлять сложностью своих программ, делая их более доступными для понимания, а также разрабатывать высокопроизводительные программы, которые будут эффективно работать с памятью. Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач.   Шаблоны проектирования Паттерны (они же шаблоны) представляют собой архитектурные конструкции, которые описывают типичные способы решения распространенных задач, возникающих в ходе проектирования программного обеспечения. Всего существует более двух десятков шаблонов, однако знать их все - это обязанность архитектора, а не .NET. разработчика.  Обычно в одном проекте используется небольшое количество паттернов, поэтому вам достаточно знать самые популярные из них.   SQL Structured Query Language - декларативный язык структурированных запросов, который создан для взаимодействия с базами данных. Особенность SQL состоит в том, что он лишь описывает необходимые компоненты и желаемые результаты, не указывая, как именно эти результаты должны быть получены. Каждый программный продукт подразумевает работу с данными, будь то обыкновенная процедура приема данных от сервера (например, скачивание файлов) или внесение в БД информации о новом зарегистрированном пользователе - умение работать с данными одинаково важно во всех сферах разработки, разве что за исключением FrontEnd.   ASP.NET Active Server Pages для .NET - платформа, использующая среду выполнения .NET Framework и предоставляющая необходимые службы для создания серверных веб-приложений и веб-сервисов. Является развитием более ранней технологии Microsoft ASP. ASP.NET базируется на среде выполнения Common Language Runtime (CLR), которая является основой всех приложений Microsoft .NET. Также данная платформа имеет преимущество в скорости по сравнению со скриптовыми технологиями. ASP.NET MVC является расширением ASP.NET и представляет собой платформу для создания веб-сервисов при помощи паттерна MVC. Данный шаблон предусматривает разделение приложения на три компонента: Модель, Представление, Контроллер, благодаря чему реализуется концепция разделения и закрепления ответственности за каждым компонентом, что упрощает разработку проектов.   ASP.NET Core Фреймворк от компании Microsoft, который использует среду выполнения .NET Core, предназначен для разработки качественных современных веб-приложений и является продолжением развития платформы ASP.NET. Однако, это не просто обновленная технология. Выход ASP.NET Core фактически обозначил качественное изменение всей платформы. Последняя версия 3.0 была выпущена не так давно - в сентябре 2019 года. Главные особенности ASP.NET Core: наличие открытого исходного кода на GitHub; кроссплатформенность; модульность; расширяемость; возможность применения облачных технологий. Более подробную информацию обо всех нововведениях можно найти на официальном сайте Microsoft. Таким образом, платформа .NET Core существенно расширила области применения технологии ASP.NET и предоставила разработчикам большое количество возможностей по созданию программного продукта.   Entity Framework 6 Entity Framework -  специальная объектно-ориентированная технология на базе фреймворка .NET, которая позволяет разработчикам получать доступ к данным, используя концептуальную объектную модель, а не непосредственно реляционную базу данных. Благодаря такому подходу уменьшается количество кода, необходимое для получения доступа к базе, растет производительность и уменьшается время на поддержку объектов в приложениях, которые работают с данными. В двух словах, эта технология позволяет программисту абстрагироваться от самой базы данных и работать с данными независимо от типа хранилища.   LINQ Language Integrated Query (язык интегрированных запросов) - это простая и удобная .NET технология доступа к данным. Особенность данного языка запросов: возможность применения ко всем источникам данных (XML-документы, XML-потоки, наборы данных ADO.NET, базы данных SQL, массивы и коллекции .NET и т. д.) одного и того же самого подхода выборки данных.   Git Наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы. Не во всех вакансиях можно встретить среди требований владение системой контроля версий, однако, знание Git или ее аналогов даст вам дополнительное преимущество перед остальными кандидатами.   Английский язык Традиционное требование для каждого разработчика в IT. Знание языка на уровне чтения технической документации и комментирования кода вполне достаточно.   Подведем итоги В статье были перечислены основные технологии, которыми должен обладать каждый .NET-программист. Поскольку веб-разработка ныне является очень популярной и востребованной, мы также добавили в список .NET средства, которые используются во время создания соответствующих серверных веб-решений. Однако среди всех пунктов наиболее важным является знание языка С# - каждый “дотнетчик” обязан им владеть на высоком уровне.   В свою очередь, перечень можно дополнить такими технологиями, как: TDD (разработка через тестирование), WCF, Unit тестирование, рефакторинг приложений. Их знание не является обязательным, однако, дает дополнительное преимущество перед другими кандидатами в глазах работодателя.  Также вы можете ознакомиться со списком всех необходимых к изучению технологий на странице специальности .NET Developer. Комплексная программа обучения состоит из 49 видео курсов общей продолжительностью 346 часов. Перейдя на страницу, вы найдете много полезной информации  - как для новичка, так и для разработчика, желающего углубить и дополнить свои знания. Более подробно тему требований IT компаний к .NET разработчику рассматривал на вебинаре Виталий Емец - FullStack Developer, Microsoft Certified Specialist. Почему многие выбирают веб-направление и какими технологиями должен владеть кандидат? Ответы на эти и другие вопросы вы найдете в этом видео -  “Как стать C#/.NET разработчиком?”. ITVDN желает Вам достижения Ваших целей и готов быть надежным помощником в вопросах обучения программированию. Оставайтесь с ITVDN! 
Уразливості в .NET платформі

Автор: Редакция ITVDN

Необходимо ли вам знать об уязвимостях в .NET? Возможно, вы по-новому взглянете на код, а может, и на свою жизнь. А вдруг вам захочется сменить квалификацию и уйти в research новых видов атак? Кто знает. Но если вы задались вопросом об уязвимости, то вы наверняка интересуетесь тем, как разрабатывать надёжные и защищённые приложения. Итак, давайте поговорим об уязвимостях, которые находят в .NET Framework.  DoS (Denial of service) – атака на ASP .NET MVC приложение. Эта атака способна серьезно нарушить работу вашего сайта, например, замедлить его, а в отдельных случаях и вовсе его заблокировать.  Как работает На сервер производятся запросы, которые он не может обработать, в результате чего сервер не успевает обрабатывать запросы обычных посетителей и выглядит для них как неработающий. Как исправлять Упростить регулярное выражение Заменить регулярное выражение на custom алгоритм Задать timeout для обработки любого регулярного выражения, используя конструктор, или для всех регулярных выражений, используя AppDomain.   Это отличные примитивные меры, когда вам не очень хочется разбираться в том, какие у вас регулярные выражения и насколько они сложные. Тем более, что такие решения вам ничего не стоят, но дают результат. Атака повышения привилегий (ЕоР) на SQL-сервер. В данном случае это luring атака, которая может скомпрометировать все данные на сервере. Атака повышения привилегий (ЕоР) в ASP .NET Core 1.0. Эта уязвимость была зафиксирована как ошибка бизнес-логики, но позже выяснилось, что она может привести к раскрытию данных и повышению привилегий пользователя. Как работает Атакующий «заманивает» более привилегированный компонент, чтобы что-то сделать от его имени. Самый простой способ осуществить такую атаку – убедить цель запустить код атакующего в более привилегированном контексте безопасности. Как исправлять Единого сюжета, как избежать этих уязвимостей, к сожалению, нет. Можно дать лишь общие рекомендации. Например: Зарегистрировать request-сервис в контексте синглтона Дважды проверять любой код, работающий с security sensitive, c sandboxing и с модификацией данных Runtime check – ещё один хороший способ защиты от подобных вещей Минимум привилегий везде Раскрытие информации ХХЕ -  это уязвимость к XML-инъекциям, которая приводит к чтению произвольных файлов на атакуемом сервере. Как работает Чтобы понять суть ХХЕ, давайте сначала разберёмся с ХМL форматом. ХМL формат может содержать описание своей структуры в теге DOCTYPE. В этом же теге могут содержаться и некоторые Entity. Если говорить по-простому, то это аналог константы, который дальше может использоваться в ХМL коде и, при парсинге этого кода, будет автоматически раскрываться. Уже это обстоятельство может привести к DoS атаке, если вы добавите Entity, которые рекурсивно раскрываются, и не зададите timeout. Парсер начнёт их раскрывать бесконечно долго. Классическая ХХЕ атака проходит следующим образом. Атакующий отправляет скомпрометированный ХМL файл на сервер, где этот файл парсится, после чего из сервера возвращается ответ. Ответ может быть совершенно любого типа, хотя существует вероятность, что злоумышленник получит именно тот локальный файл, который ему нужен. Как исправлять Запретить использование DTD файлов и External Entity Занулить resolver Ввести ограничение на размер и установку timeout Одной из причин появления уязвимостей может быть десериализация бинарных данных. Десериализация данных – это обратный процесс сериализации. То есть если при сериализации мы переводим какую-либо структуру данных в последовательность битов, то при десериализации мы восстанавливаем начальное состояние этой структуры. Как при этом процессе может возникнуть уязвимость? Допустим, у вас есть класс, реализующий команду, который запускает какой-то конвертор. Вы через конструктор передаете ему параметры этого конвертора и они валидируются в конструкторе. При этом использовать можно не каждый, а только ваш локальный конструктор. В чём же проблема? А проблема состоит в том, что при десериализации данных конструктор не будет запущен. То есть ваши данные будут десериализованы так, как они есть, включая приватные поля. Как исправлять Использовать кастомный сериализатор Использовать минимум привилегий в процессе десериализации О возможных способах десериализации вы можете узнать больше в статье Джеймса Форшав «Are you my Type? Breaking .NET Trough Serialization». Вывод К всеобщему сожалению, сейчас не существует ни одного полностью защищённого  веб-приложения. Поэтому проблема уязвимостей остаётся актуальной. Злоумышленники находят всё новые и новые способы взлома серверов и нанесения всяческого вреда компаниям или обычным людям. Следовательно, для гарантии безопасности вашего приложения вам необходимо знать, как устранять уязвимости и препятствовать их появлению. Материал подготовлен на основе выступления Михаила Щербакова, Independent Consultant, на конференции по .NET-технологиям DotNext 2016 Moscow.
Використання Redis як сервісу в Azure для прискорення роботи ASP.NET додатків

Автор: Редакция ITVDN

Введение Microsoft Azure использует кэш Redis в качестве сервиса. В нем существуют два уровня. Уровень Basic является одним узлом кеша, а Standard – полностью воспроизведенным кэшем (два узла с автоматической отработкой отказа). Microsoft управляет автоматической репликацией между двумя узлами и предлагает высокую доступность SLA (Service Level Agreement).  Уровень Premium может использовать до половины терабайта оперативной памяти, десятки тысяч подключений клиентов и группироваться или масштабироваться в большие блоки. Разумеется, Вы можете управлять своим Redis через виртуальную машину, но существует SAAS (Software as a Service/программное обеспечение как сервис), который все значительно упрощает – достаточно просто использовать его и остальное будет обработано. Мы испробуем Redis в качестве кэша для ASP.NET веб-приложений. В нем есть интересный Redis Desktop Manager с открытым исходным кодом. Еще один интересный графический интерфейс для Redis - это Redsmin. Для небольших приложений и сайтов мы можем сделать простой (Basic) кэш и получить 250 мегабайт. Мы сделали экземпляр объекта Redis в Azure. Его создание занимает пару минут. С ним можно взаимодействовать программно с помощью StackExchange.Redis, ServiceStack.Redis или любой из многих других больших пользовательских библиотек. Впрочем, сейчас существует мощная поддержка для Redis и кеширования в ASP.NET. Это библиотека под названием Microsoft.Web.RedisSessionStateProvider, которую можно получить из NuGet: Install-Package Microsoft.Web.RedisSessionStateProvider Она использует в себе библиотеку StackExchange, но это позволяет ASP.NET использовать объект Session и сохранять результаты в Redis, а не в памяти веб-сервера. Добавьте это к Вашей веб-конфигурации web.config: mode="Custom" customProvider="FooFoo">                       name="MySessionStateStore"             type="Microsoft.Web.Redis.RedisSessionStateProvider"             host="hanselcache.redis.cache.windows.net"             accessKey="THEKEY"             ssl="true"             port="1234" />      Вот строка из сессии ASP.NET, сохраненная в Redis, как показано диспетчером Redis Desktop Manager. Удобно использовать поставщик, если Вам не нужно делать изменений в любом коде. Вы можете отключить SSL и подключиться к кэшу Azure Redis Cache через открытый доступ в Интернет, но вам действительно лучше использовать SSL. Вот инструкции по использованию диспетчера Redis Desktop Manager с SSL и Azure Redis. Обратите внимание на часть, где Вам понадобится файл с .pem расширением, который является открытым SSL-ключом для Azure Redis Cache. Вы можете получить этот ключ SSL здесь (на момент написания этой статьи). Redis можно использовать не только в качестве состояния сессии, но и как молниеносный вывод кеша. Это означает кеширование HTTP-ответов в полном объеме. Его настройка в ASP.NET 4.x похожа на настройку провайдера состояния сессии (Session State Provider): Install-Package Microsoft.Web.RedisOutputCacheProvider Теперь, когда мы использовали атрибуты [OutputCache] в контроллерах MVC, или директивах OutputCache в веб-формах, как <%@ OutputCache Duration="60" VaryByParam="*" %>, ответы будут обработаны с помощью Redis. Только подумав о том, как работают Ваши строки запроса и URL-адреса, Вы можете быстро сделать приложение, как каталог продукции, например. И сделать это в 4-ре или 10 раз быстрее, используя кеширование. Это требует минимальных усилий, а результат приносит огромный. Странно, что даже в 2015 году некоторые люди обращаются к базе данных при каждом HTTP-запросе, когда теперешние нужды данных веб-приложений этого не требуют. Конечно, Вы можете работать с Redis напрямую через код. Вот документы для .NET, Node.js, Java и Python на Azure. Это удивительный проект, и обладать им, полностью управляемым, в качестве услуги приятно. С сайта Azure Redis: Redis является расширенным хранилищем значений ключей, которые могут содержать такие структуры данных, как строки, хэши, списки, наборы и сортированные наборы. Redis поддерживает набор атомарных операций с этими типами данных. Redis также поддерживает в установке репликацию «master-slave» с очень быстрой первой синхронизацией без блокирования, автоматическим переподключением при разделении сети и так далее. Другие особенности включают транзакции, публикации/подписки, сценарии Lua, ключи с ограниченным временем действия и параметры конфигурации, что позволяют Redis действовать как кэш. Вы можете использовать Redis с помощью большинства теперешних языков программирования. Кэш Redis для Azure использует идентификацию Redis, а также поддерживает SSL-подключения к Redis. Возможно, Вы заинтересованы в Redis, но не хотите запускать его на Azure или, возможно, даже на Linux. Возможно запустить Redis с помощью Redis MSOpenTech на ОС Windows. Его можно установить с NuGet, Chocolatey или загрузить напрямую с репозитория проектов GitHub. Если у Вас Redis для Windows (это легко с Chocolatey), можете использовать redis-cli.exe в командной строке для коммуникации с Azure Redis Cache. Запустить локальный сервер Redis легко: с помощью redis-server.exe проверить его в разработке, а затем изменить строку Redis-подключения Вашего приложения при развертывании на Azure. Можете проверить. В течение 30 минут Вы сможете настроить Ваше приложение, чтобы использовать кэш (Redis или другой) и увидеть некоторое, действительно, значительное ускорение. Источник: http://www.hanselman.com/blog/UsingRedisAsAServiceInAzureToSpeedUpASPNETApplications.aspx
Логування проекту за допомогою NLog Framework

Автор: Богдан Ромашко

Введение Многие начинающие разработчики при создании своих проектов не задумываются о такой вещи, как создание журнала события. Мол, проект у меня нормальный, и так сойдет. Но не забываем, что наше приложение мы пишем не для себя самих, а для клиента. Всем нужна статистика и слежение за проектами. Итак, что же насчет логирования, так это процесс записи всех сведений о проекте, а именно: информации о работе тех или иных элементах приложения, предупреждение о критической нагрузке, всяческие ошибки и т.д. Для .NET приложений был разработан очень удобный фреймворк под название NLog, с его помощью можно вести учет о состоянии всего приложения. Есть поддержка записи в файл, в базу данных. Настройка данной платформы очень удобна и легка, есть два способа: через конфигурационный файл; через конфигурационный объект LoggingConfiguration; Первый способ самый простой, так как зондирование проекта уже встроено в саму библиотеку NLog. Вся работа основа на объекте Logger – парне, который занимается ведением учета состояния нашего проекта. Для того чтобы продемонстрировать работу NLog, создадим проект по шаблону консольного приложения и назовем его NLogUnderstanding. Изначально наш проект выглядит следующим образом: using System; namespace NLogUnderstanding {     class Program     {         static void Main(string[] args)         {                          }     } } Чтобы начать работу данного фреймворка в нашем проекте, нужно установить следующие библиотеки через Package Manager Console (или же через сам менеджер расширений):  После установки NLog выбираем подход, по которому будем строить процесс слежения за состоянием приложение.  Настройка через конфигурационный файл: Первое, что нужно сделать- это установить данный пакет: После это у нас в проекте появится указанный файлик NLog.config: Начальное содержимое файла выглядеть будет примерно так: xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   <targets>     targets>   <rules>     rules> nlog> Все, после того как мы подготовили данную библиотеку, начинаем настройку объекта Logger. Первое, что мы должны сделать, это указать ему, куда мы будем писать те или иные сообщения. Все эти файлы указываются в разделе <targets>. Первое, что мы добавим, так это все возможные записи, которые мы сможем проводить:   <targets>     <target xsi:type="File" name="file" fileName="${basedir}/logs/${shortdate}.log"             layout="${longdate} | ${uppercase:${level}} | ${logger} | ${message}" />   targets> Шесть возможных вариантов ведения учета: Информация о состоянии элементов; Информация, запущенная в режиме debug для отладки проекта (можно применять в тестах); Всяческие предупреждения (например, связанные с нагрузкой); Информация об исключениях; Информация об ошибках, которые привели к критическому завершению приложения. Для каждого сообщения присутствует свой метод все в том же объекте Logger, который мы чуть позже будем разбирать. Основные атрибуты, которые нужно заполнить, это: name – название файла, нам оно понадобиться для организации правил, по которым мы будем писать именно в этот файл; fileName – указываем файл и путь к файлу, в который будем писать наши логи; layout – шаблон, по которому будет заполнятся наш файл. Как Вы уже заметили,  заполнение значений атрибутов ведется в характерной манере регулярных выражений. То есть, мы используем заранее подготовленные в библиотеке маркеры подстановки для ведения учета наших сообщений в разные файлы. Основные, которые мы использовали, это: ${basedir} – вернет базовую директорию вашего приложения. При компиляции этот маркер вернет изначальный путь (папку bin); ${shortdate} / ${longdate} – маркеры подстановки устанавливают текущую дату и время в зависимости от маркера (полную дату и время или же только дату); ${uppercase:${level}} – интересное использование вложения маркеров. Как Вы поняли, маркер ${level} будет указываться уровень сообщения (мы их перечислили ранее), приводим в верхний регистр; ${message} – под данный маркер подставляется сообщение, указанное в аргументных скобках методов (об этом далее); ${logger} – название класса, от которого поступило сообщение. После настройки целей для записи наших сообщений мы приступаем к организации правил, по которым будем заполнять наши файлы:   <rules>     <logger name="*" minlevel="Trace" writeTo="file" />   rules> Тут все намного проще, единственное, что нужно заполнить - это основные атрибуты, т.к. minlevel (минимальный уровень заполнения файла, имя которого указанного в атрибуте writeTo). После того как настроили конфигурационный файл, приступаем к работе с проектом и нашим Logger. Первое, что нужно - это создать экземпляр Logger. Это можно сделать двумя способами: Создать через первый фабричный метод LogManager.GetLogger("Example"), в аргументах указываем название логгера, менее эффективный способ, т.к. всегда нужно указывать название класса, в котором происходит запись в журнал; Создание через второй фабричный метод LogManager.GetCurrentClassLogger(), пользуясь данным методом, мы предоставляем возможность экземпляру логгера самому узнать полное квалификационное название класса, в котором произошла запись в журнал. Теперь привнесем изменения в наш созданный проект: using System; using NLog; namespace NLogUnderstanding {     class Program     {         static void Main()         {             Logger logger = LogManager.GetCurrentClassLogger();               log.Trace("trace message");             log.Debug("debug message");             log.Info("info message");             log.Warn("warn message");             log.Error("error message");             log.Fatal("fatal message");         }     } } После компиляции проекта у нас создается файл с текущей датой и в него внесутся следующий записи: 2015-05-06 14:33:46.0911 | TRACE | NLogUnderstanding.Program | trace message 2015-05-06 14:33:46.1380 | DEBUG | NLogUnderstanding.Program | debug message 2015-05-06 14:33:46.1380 | INFO | NLogUnderstanding.Program | info message 2015-05-06 14:33:46.1536 | WARN | NLogUnderstanding.Program | warn message 2015-05-06 14:33:46.1536 | ERROR | NLogUnderstanding.Program | error message 2015-05-06 14:33:46.1693 | FATAL | NLogUnderstanding.Program | fatal message Теперь можно приступать к внедрению NLog в Ваш проект, и отслеживать состояние ваших объектов. P.S. Если вы планируете применять слежение за состоянием вашего проекта, то экземпляр логгера нужно будет создавать в нужных для отладки классах. В следующей части я опишу, как применять логгирование в веб проектах на основе ASP.NET MVC.
Notification success