Violet Tape некоторые мысли о разработке на платформе .Net

24Ноя/112

TFS2011 – Создание проекта и настройка билд-сервера

После того, как я побывал на TechEd 2011 Russia, я получил заветный купон с промо-кодом для регистрации на http://tfspreview.com, где можно попробовать новый TFS в действии как сервис. По правде сказать, TFS можно теперь поставить себе локально и смотреть на него, и любоваться. Впрочем далее по тексту вы увидите, что TFS придется качать и устанавливать, но я задействовал только контроллер сборки.  Про новый TFS можно сказать много слов, но лучше всего описывает характеристика в духе: «Секси-секси!»

В этот раз я хочу рассказать о практических аспектах настройки Team Foundation Server 2011, от создания проекта до настройки билд-сервера. Вообще я изначально хотел настроить только билд-сервер, так как без него счастье было бы не полным. Дальнейшее повествование не решает каких-то супер-сложных проблем, единственно что порой некоторые моменты не совсем понятны, но для этого статья и пишется.

Далее будет много картинок и совсем немного  текста.

Метки записи: , , Читать полностью
16Ноя/110

Dapper – micro-ORM — II

Продвинутые возможности

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

Пакетная вставка данных как пример использования списка параметров

С помощью Dapper можно осуществлять пакетную вставку данных передав  список данных. Т.е. у нас есть список людей для внесения в базу данных, и с помощью единственной команды можно это провернуть. Лучше сразу на примере показать:

    public void ExecuteNonSelectBulkCommand() {
        con.Open();

        var list = new List();
        for (var i = 1; i < 5; i++) {
            list.Add(new Person {
                                    PersonId = Guid.NewGuid(),
                                    Birth = new DateTime(1980, i, i),
                                    Name = "Pers " + i,
                                });
        }

        con.Execute("INSERT INTO Person (PersonId, Name, Birth) VALUES(@PersonId, @Name, @Birth)"
                    , list);

        var persons = con.Query("Select * from Person");
        foreach (var p in persons)
            Console.WriteLine("{0} {1} {2}", p.Name, p.Birth, p.Resident);

        con.Close();
    }

Создаем несколько экземпляров класса Person, и передаем список в качестве параметра в команду Execute. Потом можно визуально проверить результат.

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

Упс!

Ничего же не менялось в коде, и все переменные указаны верно, в чем же дело?

Метки записи: , Читать полностью
14Ноя/110

Dapper – micro-ORM — I

Недавно я рассказывал про легковесную ORM BLToolkit, и при поиске и изучении материала неизбежно наталкивался на сравнение BLT с другими разработками в области мапирования данных на бизнес-объекты. Одним из самых привлекательных вариантов по скорости, а так же по вниманию общественности, оказался Dapper.

Dapper – это даже не легковесная, а микро-ORM система для чтения (в основном) информации из реляционных баз данных. Данная микро-ORM система является разработкой Сэма Сафрона (Sam Saffron) для Stack Overflow, где она работает в связке с Linq2Sql. Для такого большого и посещаемого ресурса как Stack Overflow очень важно быстро получать информацию из базы данных, так как большинство пользователей просматривает ответы, использует их в своей работе, и сравнительно редко пишет. Для записи информации, что требуется значительно реже, до сих пор самым удобным и быстрым остается Linq2Sql.

О системе

Dapper – это по сути один файл с исходным кодом, который надо включить в свой проект. Dapper работает в некотором роде классом помощником, расширяя стандартный интерфейс IDbConnection с помощью extended методов. Т.е. данному фреймворку абсолютно без разницы, с какой базой вы работаете, если соединение с ней построено на указанном интерфейсе.

Метки записи: , Читать полностью
11Ноя/110

ClickOnce, WPF, MSBuild и несколько окружений — II

Подготовка к трансформации проекта

Чтобы у нас все получилось, потребуется скачать и установить на машине билд-сервера MSBuild Community Tasks Project, так же советую его поставить и на своей машине, для экспериментов и быстрого доступа к файлу справки. Данный пакет позволяет обращаться к реализации массы наиболее часто востребованных функций во время преобразований в процессе построения приложения с помощью MSBuild. Пакет устанавливается по адресу C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks, это чтобы вы быстро нашли справку по новым доступным задачам.

Канон

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

MSBuild при сборке проекта руководствуется сложным набором правил и указаний, которые мы можем модифицировать или дополнять. Основные указания о сборке проекта содержаться в файле Common.CSharp.targets – который менять каким-либо образом крайне не рекомендуется. По принятому соглашению, все дополнения и расширения, касающиеся построения приложений должны иметь расширение .targets, по сути это XML файл.

9Ноя/110

ClickOnce, WPF, MSBuild и несколько окружений — I

Или сказ о том, как сделать публикацию приложений в один клик на разные окружения для тестирования разных версий приложений на WPF с помощью ClickOnce и TFS 2010.

На днях мне нужно было решить следующую, на мой взгляд, достаточно распространенную задачу, по размещению двух версий приложения. Одна версия QA – для тестирования текущих наработок, то, что реализуется каждый день: UI, логика, исправление мелких ошибок. Другая версия – Prod – для тестирования общих алгоритмов на реальных данных. В целом стандартная практика в мире разработки.

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

Диспозиция

В качестве исходных данных мы примем то, что у вас есть работоспособное приложение на WPF (для WinForm будет то же самое, но WPF более сложный случай), которое можно локально собрать в нескольких конфигурациях: Dev, QA(Cons), Prod.  Не важно, что именно у вас зависит от конфигурации, в общем случае, скорее всего это строки соединения с базой данных, оптимизация и логирование ошибок/действий пользователя.

Так же, как дополнительное условие, все конфигурации должны собираться на билд-сервере, в данном случае на TFS и при использовании MSBuild. То, что дальше описывается можно собирать локально, с помощью командной строки. Так что TFS – усложнение задачи, которое будем принимать во внимание.

И еще у вас успешно настроена на публикацию из VisualStudio с помощью ClickOnce хотя бы одна конфигурация приложения.

Еще раз, у нас есть:

  • WPF приложение
  • У приложения несколько рабочих конфигураций
  • Все конфигурации компилируются на билд-сервере (TFS)
  • Хотя бы одна конфигурация публикуется с помощью ClickOnce из VisualStudio

Проблема

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

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

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

25Июл/110

Wiki

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

Еще из необходимого ПО я считаю надо ставить wiki. К сожалению, предыдущий опыт не был сильно удачен. До этого я пробовал ставить википедии с помощью WebPlatform, насчет самой платформы нареканий нет, но представленные на тот момент википедии удручали. Одна не смогла доставить MySQL, да и сам MySQL не особенно желанный гость на моей машине. Второй движок ScrewWiki – вполне оправдывает свое название. Нифига не работает, редактирование паршивое, оформление тоже. Было решено отказаться от такого счастья. Поиск других движков не выглядел радужной перспективой и на какой-то момент я бросил это дело.

На днях снова заглянул в Web Platform Installer и обнаружил там новый движок для википедии, блогов, рассылок и чего-то в духе твиттера. Называется Incentive. До 10 зарегистрированных пользователей бесплатно.

24Июл/114

Правила оформления кода C# v1.0

Волею судеб я попал в "девственные леса" организации, где не было разработок на C# и надо поставить все процессы с нуля. Систему контроля версий, процесс работы, сбор требований и учет работы. Правила оформления кода. Как раз первую версию такого документа я представляю на ваш суд. Я руководствуюсь исключительно своими предпочтениями в оформлении кода, которые позволяют мне быстро и эффективно ориентироваться по коду приложения.

Здесь отражено только форматирование кода, нет указаний на code smell или какие-либо еще недочеты в самом коде.

Если есть что добавить по существу, то прошу обсудить это в комментариях.

Краткое содержание:

  • Переменные
  • Использование VAR
  • Именование методов
  • Обрамление кода
  • Комментарии
  • Оформление блоков кода
  • Свойства
  • Логические операции
  • Организация класса
Метки записи: Читать полностью