Featured Common Controls

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

Библиотека устанавливается в GAC, создает новую панель инструментов в Visual Studio, добавляется в диалоговое окно «Add reference…». Как это сделать самостоятельно, вы можете прочитать в одной из предыдущих статей.

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

Source code Установщик компонентов

Далее я вкратце опишу компоненты, входящие в библиотеку.

Подробнее

ReSharper Recipes. File templates.

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

Если можно создавать в обозревателе проектов новые классы используя alt+ins, то почему бы не сделать так, чтобы сразу создавался тестовый класс со всем необходимым?

Такое вполне можно сделать. Но чуть менее тривиальным способом. Итак, приступаем.

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

Подробнее

ReSharper: Code snippets for tests.

Мне всегда было лень набирать код полными словами, писать какие-то стандартные формулировки, это просто выводит из себя или навевает вселенскую тоску. Если раньше все это было не так печально, то за последние 2 года пользования решарпером, все усугубилось настолько, что я даже public никогда полностью не наберу, а ограничусь набором “p” и нажатием пробела — ReSharper допишет слово до конца. Единственное, что я пишу полностью, так это названия методов, классов и тестов. Заметьте что только названия, а не полное объявление.  Да, и переменные за меня называет тоже ReSharper. =) Вот такой я лентяй!

Хочу поделиться с вами знанием, как развить в себе такое же лентяйство и как в этом помогает ReSharper. Т.к. мы придерживаемся Test Driven Development, то и заготовки кода (code snippets) будут относиться к тестам.

Первое, с чего начинается любой тест, это объявление тестового класса.

Кроме названия тестового класса, всё всегда одно и то же. Я физически страдаю даже от созерцания того, как это пишут другие. В информации о себе я упоминал, что на работе мы практикуем XP и, соответственно, парное программирование как неотъемлемая его часть.

После того, как объявлен класс, как всегда идет объявление тестового метода.

Смотрите сколько текста! И осмысленного тут будет только 2 (два) слова! Руками набирать все это определенно нельзя, надо это как-то автоматизировать. С помощью решарпера все делается весьма быстро и легко.

Подробнее

Domain Specific Language для TDD

Domain Specific Language (DSL) – это язык специального назначения, который предназначен для решения какой-либо задачи в терминах самой задачи.

DSL — это не какой-то новый язык программирования в общем смысле этого слова. Вы создаете этот язык путем определения домена и разрешенных операций над доменными сущностями. Если вы разрабатываете приложения по философии Domain Driven Design, у вас в целом получается DSL  автоматически (но конечно не такой красивый, как если бы вы это делали целенаправленно). Это такой положительный побочный результат. Вы создаете правила и следуете им, так как они делают решение задачи легче. Вместо кучи строк кода, которые могут менять внутреннее состояние объекта, посылать сообщения, проверять значения и условия – вы пишете один оператор, который является значимым для задачи, а весь инфраструктурный код прячется.

DSL  должен быть декларативным и, по возможности, «текучим» (fluent interface – как пример, LINQ). Т.е. целю будет сообщить ЧТО надо делать, без упоминания КАК.

DSL не зависит от конкретного языка. Можно создавать его на любом языке программирования и конечный результат будет в целом одинаков (с поправкой на синтаксис).

Кстати, SQL тоже может рассматриваться как вариант DSL, можно – так как «язык» создан для вполне определенной предметной области.

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

Подробнее

Самописные визуальные компоненты

Для чего это нужно?

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

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

Когда и изучил более плотно смарт тэги, я решил, что некоторые компоненты могут быть улучшены. Это примерно так же как использовать Extended методы для базовых классов или создания Domain Specific Language – вообщем, чтобы писать код было быстрее и легче. То же самое применимо и к компонентам.

Итак, вот некоторые причины, по которым появляются самописные компоненты:

  • Случайно – как результат проектирования интерфейса в целом;
  • Выделение общих частей из случайных компонентов;
  • Создание компонента с самого начала;
  • Расширение существующего компонента.

Подробнее

Установка самописных компонентов

После того, как вы сделали собственные визуальные компоненты, я думаю, вы захотите их использовать в различных проектах, а впоследствии и поделится с миром наработками. Как их установить на панель инструментов в студии, как добавить эту библиотеку в “Add reference…” диалог и как избежать подводных камней в этом деле – все это будет описано в этой статье.

Подготовка сборки (assembly)

Когда у вас есть проект с настроенными компонентами и вы чувствуете что они выглядят и работают точно так как вам хочется – вы, возможно, захотите автоматизировать процесс установки. Для этого потребуется:

  1. Подписать сборку;
  2. Установить сборку в GAC;
  3. Добавить  в “Add reference…” диалог;
  4. Добавить в панель инструментов студии.

Далее я расскажу как автоматизировать почти все пункты из этого списка, в небольших примерах. Для дальнейшего повествования буду исходить их предположения, что библиотека с компонентами зовется myCustomControl.dll.

Подробнее

Smart tag – Single Binding

Intro

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

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

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

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

Подробнее

Smart tag – базовое применение

Intro

Долгое время я с удовольствием и радостью пользовался смарт тэгами. Вообще-то я долгое время даже не знал, как эта штука правильно называется, но это не мешало с пользой использовать смарт тэги. Некоторое время назад я начал разрабатывать собственные компоненты, но это не сильно сокращало время настройки пользовательского интерфейса. Очень много времени уходит на то, чтобы найти необходимое свойство в Property view, выставить нужное значение. Это не проблема, если приложение небольшое и надо настроить только пару экранов, но превращается в головную боль, когда у тебя более 30 сложных экранов с самописными компонентами. Вобщем я решил найти, как же делаются смарт тэги (эти маленькие чудесные треугольнички) и настроить их для самописных компонентов и некоторых стандартных.

Результаты поиска увенчались успехом и, в результате некоторых тестов и проб пера, получилось то, что я хотел. И это действительно стало экономить кучу времени!

В серии статей про смарт тэги я бы хотел поделиться полученными знаниями и рассказать все с самого начала.

Подробнее

ReSharper — Навигация по проекту

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

Подробнее