четверг, 15 сентября 2011 г.

Построение Progressive Fluent Interface

            В данном посте я бы хотел показать, как  построить Progressive Fluent Interface в применении к паттерну Fluent Builder.
            Применение Fluent Interface с паттерном Builder позволяет создавать выразительное и читабельное  API для построения сложных объектов.
  Подробнее том что такое Fluent Interface и Fluent Builder можно прочесть в статье Martin Fowler Fluent Interface и  здесь.

            Построение Progressive Interface рассмотрим на примере Fluent Builder для построения Email сообщений вот код данного класса
    public class EmailBuilder : IEmailBuilder
    {
        private readonly Message message;

        private EmailBuilder(Message message)
        {
            this.message = message;
        }

        public static IEmailBuilder From(string from)
        {
            return new EmailBuilder(new Message(from));
        }

        public IEmailBuilder To(string to)
        {
            message.To.Add(to);
            return this;
        }

        public IEmailBuilder Subject(string subject)
        {
            message.Subject = subject;
            return this;
        }

        public IEmailBuilder Body(string body)
        {
            message.Body = body;
            return this;
        }

        public IEmailBuilder Cc(string cc)
        {
            message.Cc.Add(cc);
            return this;
        }

        public Message Build()
        {
            return message;
        }
    }

понедельник, 5 сентября 2011 г.

Сдача сертификационного экзамена MCPD Microsoft 70-519 Pro: Designing and Developing Web Applications Using Microsoft .NET Framework 4.

Сдав последний экзамен из серии MCTS 70-513, сдал экзамен на получение статуса MCPD.
Сразу скажу что сдал экзамен на отлично. Фактически к данному экзамену не готовился так как данный экзамен включает в себя знания из прошлых экзаменов.
Экзамен 70-519 включает в себя 2 case study один на 8 другой на 11 вопросов, и набор из 32 основных вопросов.  Времени на все про все дается предостаточно около 4 часов так что не торопитесь при ответе на вопросы времени хватит.
Case study это набор связанных вопросов к определенному техническому заданию.
Сначала дается описание текущей ситуации, далее что надо изменить чтобы система (приложение) удовлетворяла новым требованиям.
По тематики вопросы покрывают следующие аспекты:
1.      Архитектура приложений
2.      Выбор технологий для Server side  ASP.NET MVC  EF WCF
3.      Выбор технологий Client side AJAX, jQuery, Silverlight
4.      Построение и выбор технологий слоя доступа к данным здесь Entity Framework WCF, ASP.Net Web Services
5.      Развертывание и конфигурация Web приложений например развертывание на IIS
6.      Безопасность приложений аутентификация авторизация и т д
Более детально по тематике можно прочесть здесь
            Вопросы были как и по ASP.NET MVC так и по Entity Framework, были также смежные вопросы но вопросы не только на чистое знание но и на понимание и как вы поступите в данной ситуации. Были вопросы связанные с архитектурой приложения например в приложении ASP.NET MVC изменилась модель данных какой слой и какие классы надо изменить для поддержки данных изменений. В общем вопросы были интереснее и легче на мой взгляд. Если у кого какие есть вопросы пишите.

четверг, 14 июля 2011 г.

Как правильнее осуществить проверку бизнес правил в ASP.NET MVC приложении?

            Данный пост является скорее всего темой для обсуждения, а не готовым решением хотелось бы выяснить у кого какие мнения и решения на данный счет.
При разработки ASP.NET MVC приложения столкнулся со следующей задачей опишу  вкратце.
Приложение ASP.NET MVC имеет архитектуру из 3 слоев.
1. Data Access (Repositories)
2. Business logic (Services)
3. Application layer (Controllers)
            Имеется класс Learner который представляет собой сущность ученика, ученики могут сдавать экзамены, при сдаче экзамена, создается заказ (Order  класс), после сдачи экзамена, для каждого ученика необходимо выставить результирующие оценки. При выставлении результатов необходимо проверить следующие правила
1.      Результаты не должны быть уже выставлены
2.      Все ученики которые имеют статус Present (присутствовал на экзамене) должны иметь оценку
3.      Оценочная шкала должна быть подтверждена.

среда, 13 июля 2011 г.

Сдача сертификационного экзамена MCTS Microsoft 70-513 WCF Development with Microsoft .NET Framework 4.

В июне сдал сертификационный экзамен Microsoft 70-513.
В отличие от предыдущего экзамена 70-516 вопросов было меньше, а именно 46, времени соответственно тоже меньше давалось около полтора часа. Вопросы были в основном на знание:
1.       Создание WCF- сервисов
2.       Описание контрактов
3.       Конфигурирование WCF- сервисов
4.       Конфигурирование end-point
5.       Хостинг WCF- сервисов
6.       Безопасность
В целом экзамен сдал успешно хоть и вопросы показались сложными.
Если у кого есть вопросы спрашивайте отвечу.

понедельник, 11 июля 2011 г.

Поиск Work Items в TFS Visual Studio.


                На работе используем Visual Studio 2010 и систему контроля версий  TFS и очень часто необходимо найти тот или иной Work Item например по названию или слову в тексте это все можно сделать с помощью queries, но это не удобно,  хотелось что-то по удобнее и легче в использовании. Немного поискав в интернете нашел add-in который и решает данную задачу.

среда, 6 июля 2011 г.

ReSharper 6.0 вышел в релиз.

   Вчера вышел в релиз версию Resharper 6.0. Что нового в данном релизе?
Была добавлена поддержка трех языков: JavaScript, CSS и HTML плюс ASP.NET MVC 3 Razor view engine. В Reshrper 6.0 был добавлен встроенный в Visual Studio декомпилятор
dotPeek, который можно устанавливать и отдельно.
Улучшена поддержка XAML, улучшенная поддержка unit тестирования например в NUnit 2 улучшен интерфейс окна для запуска unit -тестов, возможность запускать TestCase отдельно.
Выполнение найболее популярных рефакторингов по новому сначала множно редактировать код а потом по нажатию Alt+Enter применить подходящий метод рефакторинга.
Также подержка цветов в CSS, XAML C# Resharper позволяет визуализировать цвета.
Более подробно почитать о новых возможностях можно здесь
Скачать триал версию можно здесь скачать Resharper 6.0

суббота, 11 июня 2011 г.

Сдача сертификационного экзамена Microsoft 70-516 Accessing Data with Microsoft .NET Framework 4


Сдал 6 июня сертификационный экзамен Microsoft 70-516 и хочу написать пару слов об этом.  Первое, что меня удивило это количество вопросов на экзамене всего было 73 вопроса, в то время как раньше было около 51 вопрос. Экзамен проходил в следующем ключе.

понедельник, 16 мая 2011 г.

Тестирование конфигурации AutoMapper

На верное многие уже слышали про  AutoMapper и знают что это такое, но если нет, то  вкратце расскажу. AutoMapper - это object - object  mapper.  AutoMapper полезен, когда надо, например, из объектов модели данных скопировать лишь некоторые свойства в объекты  DTO.

вторник, 3 мая 2011 г.

Сдача сертификационного экзамена Microsoft 70-515 ASP.NET 4 Web


Недавно сдал сертификационный экзамен Microsoft  70-515 и хочу написать пару слов об этом. При сдаче данного экзамена сразу получаешь MCTS ASP.NET 4 Web сертификат. Ранее для получения сертификата MCTS в одной из областей будь то Web или Desktop приложения, надо было сдавать один обязательный экзамен 70-536 по основам .NET Framework , а потом еще один по выбранной технологии.  Только после этого можно было получить сертификат MCTS.  Теперь же система сертификации изменилась достаточно сдать один экзамен либо 70-511 для Desktop либо 70-515 по Web и вы сразу получаете сертификат MCTS. Для того что было получить MCPD необходимо сдать еще два экзамена 70-516 Data Access и 70-513 – WCF эти два экзамена общие как для Web так и для desktop направления и после этого уже можно сдать экзамен для получения MCPD какой именно также зависит от выбранного направления. Ну теперь собственно о сдаче экзамена.

суббота, 2 апреля 2011 г.

Рефакторинг метода с большим количеством параметров

Не давно, на работе столкнулся со следующей проблемой, по изменившимся требованиям надо было изменить существующий код в проекте на ASP.NET MVC.  В одном из классов сервисов оказалось несколько методов с большим количеством параметром более 20 вот сигнатура одного из методов
Qualification CreateQualification(string achievableCode, string achievableTitle,
              string accreditationRef, bool brandingPrefix, long brand,
              float guidedLearningHours,
              int creditValue, long level, long type, long gradingType, long area,
              int subArea,
              DateTime accreditationStartDate, DateTime accreditationEndDate,
              DateTime lastCertDate, string nameOnCert,
              long organisationId);

суббота, 5 марта 2011 г.

ReSharper полезные горячие клавиши

В этом посте я хочу описать наиболее полезные и часто применимые горячие клавиши отличного инструмента для Visual Studio  ReSharper.
    ReSharper помогает писать и изменять код быстро и легко.  Для увеличения продуктивности и упрощения работы с ReSharper я рекомендую изучить и использовать горячие клавиши.
ReSharper включает две схемы клавиш  Visual Studio и IntellyJ Idea, я  опишу первую схему.
Вы можете выбрать используемую схему если пройдете в главное меню ReSharper  -> Options  и далее на вкладку Visual Studio Integration. Горячих клавиш у ReSharper –а очень много более 80 я же перечислю наиболее часто используемые при работе.
Alt+Enter – Показывает действия для быстрого исправления в зависимости от контекста где расположен курсор
Ctr+E,U – Окружает код по шаблону например  try catch if и т д.
Alt+Shift+L  Отображает местонахождение текущего файла в окне обозревателя решения(Solution Explorer)
Ctrl+Shift+Backspace  - Переход на предыдущее место редактирования
Alt+InsSolution Explorer) Создание файла по шаблону
Ctrl+E,Ctrl+C – Запускает функцию очистки кода необходимо предварительно настроить как будет производиться очистка
Ctrl+E,H – Отображение иерархии типа Например если навести курсор на имя класса и нажать эти клавиши то отобразится полная иерархия в которую включен данный класс

пятница, 18 февраля 2011 г.

Новая constraint based модель проверок NUnit Framework

В данной статье я расскажу про новую модель проверок на основе constraints, которая   поможет сделать тесты лучше
                                                Constraint based model
Старая модель проверок основывалась на классе Assert, который имеет набор статических перегруженных методов для проверки различных условий. К примеру, при этом подходе тесты выглядят так:
    [Test]
        public void TraditionalAssertModelTest()
        {
           
            string result = "Asd" + 3;
           
            Assert.AreEqual("asd3", result.ToLower());
        }

Статический метод  AreEqual имеет довольно много перегрузок, что не очень удобно. Новая же модель проверок использует один метод для всех проверок. Вот пример аналогичного теста с использованием новой модели:

        [Test]
        public void NewConstraintModel()
        {
            string result = "Asd" + 3;
            Assert.That(result, new EqualConstraint("asd3").IgnoreCase);
        }

вторник, 1 февраля 2011 г.

Как сгенерировать XSD схему из классов .NET


Иногда бывает  необходимость сгенерировать XSD  схему из определенных классов.  
Например, если используется приложение, которое  взаимодействует с сервером, передавая данные, сериализуя  объекты классов в xml формат. Для дальнейшей работы с данными на сервере необходим формат этих данных, а точнее XSD  схема данных.                   Решение этой задачи оказалось простым это можно сделать с помощью утилиты xsd.exe,  которая включена в состав Visual Studio и .NET Framework SDK.
 Данная утилита находится в папке ..\Program Files\Microsoft SDKs\Windows\v7.0A\bin,
а для /NET 4 ..\Program Files\MicrosoftSDKs\Windows\v7.0A\bin\NETFX 4.0 Tools.
  Например, у нас есть приложение, которой есть сборке TestProject.dll в данной сборке есть класс MyClass для, которого необходимо сгенерировать XSD схему.
Для того чтобы сгенерировать схему  надо запустить  xsd.exe утилиту из командной строки Visual Studio (либо Windows) далее набрать следующую команду
xsd  /t: MyClass TestProject.dll
опция /t: задет класс, для которого надо сгенерировать схему далее
указывается путь и имя сборки, в которой находится класс
узнать описание всех опций можно, введя команду    xsd  /?
после успешного выполнения данной команды будет сгенерирован файл schema0.xsd
Также с помощью этой утилиты можно делать и обратное, из xsd схемы можно генерировать классы. Подробнее можно почитать на msdn и здесь

воскресенье, 23 января 2011 г.

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


Чтобы получить все классы, из какой либо сборки, которые наследуют от данного класса можно воспользоваться методом IsSubclassOf(Type baseType)
Например, вот так:

public IEnumerable<Type> GetAllDerivedTypesOf(Type baseType)
{
    var types = Assembly.GetAssembly(baseType).GetTypes();
    return types.Where(t => t.IsSubclassOf(baseType));
}

Данный метод ищет все типы в сборке, где находится базовый класс
Метод IsSubclassOf() работает только с классами если передать в качестве параметра тип интерфейс, то метод вернет false и соответственно ничего не будет найдено.

Для того чтобы найти все типы которые наследуют от какого либо класса либо реализуют определенный интерфейс нужно воспользоваться методом
IsAssignableFrom(Type type) данный метод проверяет, если параметр является наследником текущего класса или же если текущий тип является интерфейсом, то метод проверяет, если тип параметра реализует интерфейс, также данный метод возвращает true если параметр type равен текущему типу.
Следующий метод вернет все типы, которые наследуются от baseType даже если передать в качестве параметра интерфейс

public IEnumerable<Type> GetAllDerivedTypesOf (Type baseType)
{
    var types = Assembly.GetAssembly(baseType).GetTypes();

    return types.Where(baseType.IsAssignableFrom).Where(t => t != baseType);
}