Async\Await методы и PostSharp

Сложность 300-400

Описание проблемы

Уже много чего написал насчет PostSharp, конкретных решений, кастом компонентов, общие принципы работы. Однако с выходом .Net 4.5 появилась новая фича со специальными словами async\await которые позволяют более просто и компактно описывать асинхронное поведение методов. Новый функционал хорош, но добавляет головной боли при использовании PostSharp, с методами помеченными async, использование классических аспектов не пройдет. Методы с маркером async разворачиваются в машину состояний, что не очень хорошо с точки зрения применения аспектов. Т.е. возьмем стандартную реализацию аспекта трассировщика с помощью  PostSharp:

И применим его к тестовому примеру с вызовом синхронных и асинхронных методов с исключениями и без:

Результат выполнения программы представлен ниже, и для большей наглядности я разукрасил выводы для каждого метода.

Подробнее

Зачем рефакторить код «на пальцах»

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

В этом месте начальство делает глаза чуть круглее и задает вопрос: «Там что-то сломано и не работает?»

– Нет, все работает, но надо поправить код.
– Зачем поправлять, если работает все и так?
– Структурно неверно написано, надо разнести некоторые вещи.

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

Подробнее

Тихое обновление с ClickOnce Video

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

Помимо очевидной пользы в том, что пользователь узнает об обновлении ПО после публикации без закрытия приложения, есть неочевидный плюс в том, что тихое обновление производится быстрее и требует меньше действий от пользователя, я это покажу отдельно.

 

Hard’n’Heavy!

 

 

Тихое обновление с ClickOnce

Сложность 200

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

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

Помимо очевидной пользы в том, что пользователь узнает об обновлении ПО после публикации без закрытия приложения, есть неочевидный плюс в том, что тихое обновление производится быстрее и требует меньше действий от пользователя, я это покажу отдельно.

Подробнее

Покрытие кода

В связи с последними постами на тему тестирования и использования Mighty Moose, хотелось бы так же затронуть тему покрытия кода, которую менеджеры часто используют для оценки качества кода. Некоторые разработчики, неискушенные в вопросах тестирования могут так же думать, что покрытие кода одно из ключевых свойств отображающих насколько качественно написаны тесты. К авторам MightyMoose так же выдвигались требования и просьбы включить покрытие кода в продукт, но Грег яростно отпирается от этого, так как само по себе покрытие кода не говорить ни о чем совершенно.

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

Значение покрытия не дает ничего. НИЧЕГО.

Предлагаю рассмотреть несколько сценариев, когда покрытие кода не дает желаемого результата.

Подробнее

DCI презентация для TechEd2012

Всем привет!

Как я и обещал первые драфты презентации доступны в SkyDrive по этой ссылке. https://skydrive.live.com/redir?resid=91D2A6BED92B69C5!567&authkey=!AL5e-t6Tc-M84R8 В презентации к слайдам есть комментарии. Это если их не видно сразу.

Презентация будет постоянно обновляться до тех пор, пока я ее не расскажу или же мне не откажут в принятии заявки =) Надеюсь, что последнее не произойдет.

Комментарии, предложения, дополнения и прочее приветствуются.

 

UPD: Статью не приняли на TechEd, так как судя по расписанию треков там только нужны WinPhone8, Win8, Server 2012 доклады, зато предложили сделать подкаст для TechDays. А так же есть предварительная договоренность выступить с этой презентацией на JavaConf от Luxoft в середине декабря.

Так что вроде бы все не зря )

Mighty Moose Risk Analysis

В видео ниже я рассказываю о том, как Mighty Moose проводит анализ рисков в вашем проекте, и как пользоваться этим инструментов. Что означают знаки в Mighty Moose, в общем все что может пригодиться для того, чтобы качественно покрыть приложение тестами.

 

Hard’n’Heavy!

Срочно в номер!!!

Всем привет!

У меня есть огромная просьба ко всем читателям блога, не останьтесь равнодушными и подскажите, какой материал из блога может быть наиболее интересен для публикации на TechEd2012. Можно предложить больше одно материала, напишите что вам понравилось больше всего, и что можно рассказать на такой конференции.

Возможность предоставляется в рамках акции «Глас народа». Подробности тут http://habrahabr.ru/company/microsoft/blog/158409/#habracut  , а темы по этой ссылке http://www.msteched.ru/tracks . Но вообще можно и на свободную тему.

Свои предложения по тому, какой материал у меня вышел особенно хорошо, или же интересно и можно допилить пишите в комментах. Или же на почту my@violet-tape.net.

Очень жду!

 

Hard’n’Heavy!