Pull to refresh
20
0
Андрей Цветков @AndreyTS

User

Усиливаем контроль типов: где в типичном C#-проекте присутствует непрошеный элемент слабой типизации?

Reading time 5 min
Views 19K
.NET *C# *

Проблема


Мы привыкли говорить о языках вроде C# как строго и статически типизированных. Это, конечно, правда, и во многих случаях тип, указываемый нами для некоторой языковой сущности хорошо выражает наше представление о ее типе. Но есть широко распространенные примеры, когда мы по привычке («и все так делают») миримся с не совсем верным выражением «желаемого типа» в «объявленном типе». Самый яркий — ссылочные типы, безальтернативно оснащенные значением «null».
В моем текущем проекте за год активной разработки не было ни одного NullReferenceException. Могу не без оснований полагать, что это следствие применения описанных ниже техник.

Рассмотрим фрагмент кода:

public interface IUserRepo 
{
	User Get(int id);
	User Find(int id);
}

Этот интерфейс требует дополнительного комментария: «Get возвращает всегда не null, но кидает Exception в случае ненахождения объекта; а Find, не найдя, возвращает null». «Желаемые», подразумеваемые автором типы возврата у этих методов разные: «Обязательно User» и «Может быть, User». А «объявленный» тип — один и тот же. Если язык не заставляет нас явно выражать эту разницу, то это не означает, что мы не можем и не должны делать это по собственной инициативе.
Maybe в C#: какие есть варианты
Total votes 37: ↑32 and ↓5 +27
Comments 63

Распараллеливание задач. Случай «идеальной параллельности». Часть 2

Reading time 13 min
Views 16K
.NET *

Предлагаемые решения в .NET 4


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

Для распараллеливания «идеальных» циклов предоставляются следующие варианты:
  • класс System.Threading.Tasks.Parallel с методами For (), ForEach ()
  • Parallel LINQ с методом расширения AsParallel ().


Читать дальше
Total votes 35: ↑30 and ↓5 +25
Comments 8

Распараллеливание задач. Случай «идеальной параллельности». Часть 1

Reading time 11 min
Views 23K
.NET *

Распараллеливание кода без зависимостей


Введение

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

Читать дальше →
Total votes 44: ↑35 and ↓9 +26
Comments 29

Анти-Сервисный центр Сервисфон

Reading time 3 min
Views 526
Lumber room
Хочу предупредить людей, дабы не наткнулись на сию организацию.

Что случилось


Мой HTC Desire в один прекрасный день словил обновление на версию ОС Android 2.2, которое (обновление) привело к неработоспособности телефона. В интернете эта проблема уже обсуждалась, и связана была, видимо, с некорректной версией обновления, попавшей на некоторые телефоны. Конкретно — он перестал видеть WiFi, сотовую сеть и SD-карту, и перезагружался каждые 3 минуты.
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Comments 5

Компиляция страниц ASP.NET: генерация кода

Reading time 10 min
Views 7.1K
.NET *
Сейчас пришла пора разобраться с тем, что происходит с кодом от момента написания ASPX/ASCX- разметки и CS-кода до момента их физического выполнения в виде некоторого скомпилированного кода на сервере.
Читать дальше →
Total votes 16: ↑10 and ↓6 +4
Comments 4

Генерация скрипта базы данных по модели данных Entity Framework

Reading time 1 min
Views 1K
Lumber room
В будущей версии редактора моделей Entity Framework в Visual Studio ожидается такая полезная функциональность, как обратная генерация базы данных по модели данных (SSDL — Storage Schema Definition Language). Но пока её нет, можно воспользоваться XSLT-преобразованием, которое поможет получить из XML-описания модели хранилища SQL-DDL код для создания таблиц и связей в БД.

Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 1

Сервис Вопросы-Ответы: как правильно дать ответить на вопрос?

Reading time 2 min
Views 3.7K
Interfaces *

Доброго времени суток, уважаемые Хабрапользователи!



Некоторое время назад мы начали разрабатывать систему вопросов-ответов (две малоизвестные компании уже создали по аналогу: ответы mail.ru или ответы Google). И мы, кроме прочего, поставили задачу избавиться от всех недочётов и проблем, которые мы выявили в существующих подобных системах.
Итак, ...
Total votes 10: ↑8 and ↓2 +6
Comments 11

Навигация на AJAX-сайтах: Extender Control для ajaxtoolkit: TabContainer

Reading time 15 min
Views 2.1K
Website development *
Этот пост будет интересен прежде всего ASP.NET-разработчикам, которые осваивают «продвинутый» функционал AjaxControlToolkit, в частности, расширение стандартного TabControl — контрола, обеспечивающего клиентские вкладки («табы») на странице.

Впрочем, так как задача по сути сводится к клиентскому программированию, общие принципы окажутся полезными не только ASP.NET-разработчикам, поэтому, думаю, место ей в блоге «Веб-разработка».

Постановка проблемы: обеспечить при использовании TabControl соответствие текущей выбранной вкладки содержимому адресной строки браузера. То есть,
  1. чтобы при переходе между вкладками соответствующим образом изменялся адрес,
  2. можно было в любой момент скопировать ссылку, и открыв её после, попасть на ту же вкладку, откуда была скопирована ссылка,
  3. обеспечить корректную работоспособность кнопок «Назад» и «Вперёд» браузера для навигации по вкладкам.
Решил разобраться с AJAX Extender Controls и реализовать эту полезную штуку именно в виде Extender-контрола.
погружаемся
Total votes 14: ↑10 and ↓4 +6
Comments 7

Сервис: Видеособеседования

Reading time 2 min
Views 542
Lumber room
Сам работаю с фрилансерами и большинство из них — жители небольших городов России и Украины. Часто сталкивался с тем, что многие из фрилансеров готовы выйти на постоянную работу, если их устроят условия работа и зарплата, которые в их родных городах просто никакие, но ехать наобум в другой город, еще не получив гарантию, что возьмут на работу, желающих нет. А гарантии такой без собеседования никто давать не будет.

Думаю, такие фрилансеры и на Хабре есть, потому стоит пропиарить вот такую вот штуку — может, кому-нибудь пригодится.

смотрим: удалённые видеособеседования
Total votes 2: ↑2 and ↓0 +2
Comments 11

ASP.NET: расширяем механизм путей SiteMapPath

Reading time 3 min
Views 2K
.NET *
При разработке на ASP.NET мы привыкли для стандартных задач использовать стандартные компоненты. Одной из таких стандартных задач является вывод на каждой странице сайта пути к ней от главной страницы — фрагмента карты сайта (sitemap path). Для этого используется контрол SiteMapPath, берущий данные о карте сайта от провайдера карты сайта (SiteMapProvider) по умолчанию, который, в свою очередь, берет их из конфигурационного файла Web.siteMap.

Поместив этот контрол на мастер-страницу сайта, и описав в конфигурационном файле карту сайта, мы тем самым обеспечиваем вывод пути на всех страницах.

Но ASP.NET — расширяемая среда, и позволяет замещать почти все стандартные модули, и провайдер карт сайта — не исключение. Мы рассмотрим, как создать свой провайдер для получения расширенной функциональности для карты сайта.

Читать про SiteMapPath с динамическим содержимым
Total votes 1: ↑1 and ↓0 +1
Comments 6

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity