Раздумья над Фаулером

8. May 2010

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

Мысли по первым двум главам.


О Производительности:

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

    Почти всегда? если вы боретесь за производительность пострадает понятность кода. И наоборот.

    Как бы то ни было до появления проблем с производительностью, проведения профилирования, не всегда можно сказать какой участок кода тормозит. Даже если и кажется, что узкое место в цикле - то есть много НО. Мы не знаем как часто выполняется цикл, сколько обычно в нем итераций происходит и сколько времени каждая итерация занимает.

 

О Проектировании:

    При проектировании и написании кода стоит писать код реализующий только требуемую функциональность, не надо предполагать еще 50 возможностей которые могли бы быть полезны заказчику. Проектируем и реализуем только то, что требуется  для выполнения требуемых функций. Важно чтоб все возложенные на разрабатываемую систему обязанности были формализованы, например в UML или в любой другой, понятной(!) для всех участников проекта, форме. Вот и причина формализовать юз кейсы, чтоб не реализовывать лишнего, не загружать архитектуру потенциальными возможностями, которые ,возможно, никогда не будут реализованы.

More...

Refactoring, Architecture , , ,

Технология ClickOnce

22. July 2009

 Речь идет о технологии развертывания .NET приложений.

Приложения ClickOnce  - это приложения .NET(Console, WinForms, WPF) и С++, которые были опубликованы с помощью технологии развертывания ClickOnce. Теоретически при помощи утилит Mage и MageUI можно развернуть любое исполняемое Windows приложение.

Приемущества по сравнению с другими способами развертывания(xcopy, WindowsInstaller).

ClickOnce приложения может попасть в руки пользователю из разных источников: 

  1. C Web-Страницы или сетевого каталога. 
  2. С компакт диска или любого другого сьемного носителя. При публикования дистрибутива autorun генерируется автоматически.
  3. Пользователь может сразу запускать приложения, без его установки на свой ПК. Фактически, приложение копируется в Кэш ClickOnce. Кстати, его размер по умолчанию 250 мб, находится кеш в пользовательском каталоге, а значит не доступен другим пользователям. Чтоб изменить его размер нужно изменить один ключь в реестре. Подробней в msdn.
ClickOnce предоставляет гибкие средства для обновления приложений пользователя. Теперь не нужно рассылать письма "Вышла новая версия, скачайтее ее тут". Приложения теперь обновляются автоматически. Обновляться будут только те файлы которые изменились(изменения определяются по хешам файлов).
Проверка наличия обновления может быть:
  1. До запуска приложения. Если есть новая версия, пользователь будет работать с ней, иначе со старой.
  2. После запуска. Пока пользователь работает с вашей программой, .NET, с определенной периодичностью, в фоне, будет проверять наличие новой версии. При следующем запуске будет предложено обновить версию.
  3. Разработчик может реализовать свой вариант обновления, для этого предоставляется специальный API.
В дополнение, можно установить минимальную версию приложения для запуска. Если установить последную версию как минимальную, пользователь не сможет работать с приложением не обновив его.
По умолчанию ClickOnce приложения выполняются в контексте безопасности Internet. Приложению предоставляется минимум ресурсов.

  Процесс создания дистрибутива, называется опубликование(publish). Во время этого процесса в целевой директории на диске или в сети / ftp ресурсе /IIS приложении создается иерархия каталогов с необходимыми файлами. В отличии от WindowsInstaller, в  ClickOnce монолитного дистрибутива нет. Как раз это и позволяет производить обновление только изменившихся файлов.


 

Основные составляющие ClickOnce приложения: 

  1. Манифест приложения.
  2. Манифест развертывания.
  3. Развертываемое приложение и все его компоненты. 

Пример каталога полученного в результате публикации приложения с названием "<AppName>". 

  • PublishDir
    • <AppName>.application [Основной манифест развертывания, как раз его и должный запрашивать пользователи.]
    • Publish.htm   [html файл, генерируется автоматически. Основная задача указать ссылку на скачивание файла манифеста развертывания <AppName>.application
    • <AppName>_1_0_0_1.application [маниест развертывания соответствующий версии, создается для каждой новой версии]
    • <AppName>_1_0_0_1 [папка в которой содержатся все файлы приложения данной версии, а так же манифест приложения, создается для каждой новой версии] 
      • <AppName>.exe.deploy [расширение ".deploy" добавляется ко всем файлам приложения, по умолчанию. Это упрощает процесс настройки прав доступа к файлам на вебсервере. Нужно разрешить вебсевиру отдавать пользователю только файлы с расширением ".deploy", ".manifest", ".application".]
      • <AppName>.exe.manifest [манифест приложения.]

  


 Создать ClickOnce приложение можно несколькими способами: 

  1. Через Visual Studio - самый простой, но с ограничениями.
  2. При помощи MSBuild из консоли. 
  3. При помощи консольной утилиты Mage.exe из .NET SDK или ее более дружелюбного варианта под названием MageUI.exe.
Используя MSBuild или mage.exe можно добится полностью автоматизированного опубликования приложения. Например, публиковать новую версию при каждом удачном TeamBuild в Team Foundation Server или по расписанию.
Самое большое ограничение при создании  ClickOnce через MSBuild или VisualStudio в том, что конечный список файлов состоит только из исполняемых модулей проекта и проктов связанных с ним ссылкой(References). Если мы хотим добавить какой-либо Help или Config файл который не включен в публекуемый проект, стоит использовать утилиты mage или MageUI (лежат они в .NET SDK). 

Обзор практической части развертывания порекомендую смотреть доклад на TechDays.ru (http://www.techdays.ru/videos/1274.html


 

Всякие мелочи.

 

  1. Есть возможность. Задать URL службы тех поддержки для вашего приложения.
  2. Вы можете подписать свое ClickOnce приложение сертификатом выданным центром сертификации. Тем самым вы подтвердите, что разработчик этого приложения именно вы, а не какой-нибудь хитрый трояно писатель.
  3. Если вашему приложению требуются какие либо особенные компоненты, например, .NET 3.5 и не сотой ниже. В случае отсутствия требуемого компонента, пользователю будет предложено скачать недостоющую часть(источник можно задать произвольный).

 


Плохая новость.

Работает ClickOnce это только в IE. Для Firefor и Opera необходимо поставить соответствующий плагин или конфигурировать браузер.

Плагин для FireFox.

Настройки для Opera:

Идем в Tools->Preferences->Advanced->Downloads ->Add..

Устанавливаем параметры:  

MimeType: application/x-ms-application 
Extension: application
Select Open With Other Application:  explorer.exe ( он обычно в папке Windows лежит)
Ставим галку напротив "Pass Web Address Directly To The Application ".

Попробовать поставить приложение ClickOnce можно тут. RiotClipboard.

ClickOnce в интернетах:

http://wiki.dodex.org/?p=447 

http://www.c-gator.ru/articles/deploying/

http://www.techdays.ru/videos/1274.html 

http://msdn.microsoft.com/ru-ru/library/142dbbz4.aspx 

Visual Studio, .NET , ,