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

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

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

 

Hard’n’Heavy!

 

 

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

Сложность 200

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

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

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

Подробнее

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

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

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

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

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

Подробнее

Mighty Moose Risk Analysis

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

 

Hard’n’Heavy!

Обзор работы с Mighty Moose

Обычный цикл разработки с помощью ТDD подразумевает использование подхода Red-Green-Refactor, который конечно же работает хорошо и при одного теста и знании горячих клавиш достаточно производителен. Однако, если затрагивается сложный функционал, то при рефакторинге кода могу затрагиваться самые разные тесты и тогда приходится вручную запускать все тесты, дабы убедится что ничто не сломано и все работает как планировалось. Вот это действие уже накладное и может вызывать большие потери времени разработчиков при запуске всех тестов и ожидании результатов, даже если предположить, что все тесты написаны качественно и проходят очень быстро.

В этой ситуации на помощь приходит Mighty Moose с подходом continuous testing (непрерывное тестирование). Мне логичным появление такой системы, с учетом того, что до этого набрали популярность и оправдали свое существование техники непрерывной интеграции и непрерывной доставки. Mighty Moose действительно оправдывает инсталляцию и занимаемую оперативную память.

В видео подкатом я в обзорном режиме показываю как работать с Mighty Moose.

 

Hard’n’Heavy!

 

 

Непрерывное тестирование с Mighty Moose

Уже очень давно не утихают разговоры про Test Driven Delepoment и большинство разработчиков скорее всего уже на собственном опыте ощутили насколько безопасным и приятным становится разработка и рефакторинг приложений, когда существуют тесты. Полный набор тестов.

Обычный цикл разработки с помощью ТDD подразумевает использование подхода Red-Green-Refactor, который конечно же работает хорошо и при одного теста и знании горячих клавиш достаточно производителен. Однако, если затрагивается сложный функционал, то при рефакторинге кода могу затрагиваться самые разные тесты и тогда приходится вручную запускать все тесты, дабы убедится что ничто не сломано и все работает как планировалось. Вот это действие уже накладное и может вызывать большие потери времени разработчиков при запуске всех тестов и ожидании результатов, даже если предположить, что все тесты написаны качественно и проходят очень быстро.

В этой ситуации на помощь приходит Mighty Moose с подходом continuous testing (непрерывное тестирование). Мне логичным появление такой системы, с учетом того, что до этого набрали популярность и оправдали свое существование техники непрерывной интеграции и непрерывной доставки. Mighty Moose действительно оправдывает инсталляцию и занимаемую оперативную память.

Подробнее

Внедрение Notification Bar

Сложность 100

В прошлый раз я провел общий обзор компонента Notification Bar, рассказал как он работает, возможности, планы по развитию. Немного коснулся того, как модифицировать код, чтобы можно было внедрить Notification Bar (NB), насколько мало надо действий для этого. В этом посте я хочу детально разобрать о том, как внедрить систему уведомлений в приложение, и, я надеюсь, вы согласитесь с тем, что это сделать весьма просто.

Установка

Начнем с установки компонента. Это можно сделать с помощью NuGet пакета следующей командой:

Install-Package VioletTape.NotificationBar

При установке будут подгружены так же все зависимые компоненты и пакеты:

  • PostSharp Free Community Edition
  • PostSharp Threading Toolkit
  • PostSharp Domain Toolkit
  • Rx Framework
  • StructureMap
  • MakeMeAsync

Данный пакет необходимо будет установить для сборки с UI компонентами и для сборки с моделями.

UI настройка

Естественно, что для любой технологии и для любого компонента всегда есть некоторые ограничения и необходимые начальные условия. Так что предлагаю рассмотреть некоторые необходимые начальные условия для Notification Bar. На данный момент такими естественными ограничениями являются технологии:

  • .Net Framework 4.5
  • Windows Presentation Framework

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

Реализация данного интерфейса позволяет системе уведомлений переводить пользователей на нужные экраны и отслеживать текущее визуальное состояние программы. Я постарался максимально сократить требования интерфейса, чтобы максимально упростить внедрение.

В этом месте стоит остановится поподробнее и рассказать об общей системе приложений, о системе UI.

Если мы говорим о сколько-нибудь серьезном приложении, для которого собственно и понадобится система уведомлений, то скорее всего схематически оно выглядит так:

Подробнее

Notification Bar Overview

Сложность 100-200

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

Идея создания

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

Архитектура приложения была построена так, что с долгой операцией (расчетами) связанной с базой данных был связан Id, который переписывался для каждого такого действия с базой, получается что в один момент можно было делать только одно большое действие и не переходить с экрана, для того, чтобы в конце концов узнать результат работы.

Очень хотелось сделать так, чтобы можно было достаточно безболезненно модифицировать имеющийся код, чтобы можно было осуществлять свободную навигацию по приложению и видеть отчет о завершенном действии в области уведомлений приложения. Отчего-то хотелось именно в самом приложении обо всем сообщать, а не выносить в «иконку рядом с часами». Не буду лукавить, это «отчего-то» пришло от частого созерцания области уведомлений на планшете с Android 4, и мне очень нравится то, как сделаны уведомления в системе и хотелось их как-то повторить.

Получается, что есть два желания, которые коррелируют друг с другом очень хорошо, по крайней мере лучше, чем идеи в фильме Super 8. А так как идеи достаточно давно вынашивались и могла появится конкретная польза, то я решил реализовать всё не отдавая себя прокрастинации.

Итак, основная идея:

Необходимо иметь возможность так проинстументализировать модели, чтобы они могли сообщить об окончании работ пользователю. Так же должна быть возможность перейти на экран, который сгенерировал сообщение.

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

Подробнее