• Ubiquitous Language и Bounded Context в DDD


      Domain-Driven Design: Tackling Complexity in the Heart of Software Эванса — лучшая книга о проектировании действительно больших enterprise-приложений, что я читал. Видимо это мнение разделяют многие другие разработчики и проектировщики, потому что Entity и ValueObject, Repository и Specification встречаются почти в каждой большой кодовой базе. Но вот незадача, Ubiquitous Language (единый язык) и Bounded Context (контекст предметной области) в чужом коде я не видел ни разу. И здесь зарыта очень большая собака.
      Выкапываем собаку
    • Вещи, которые мы хотим сделать «потом»

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



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

        Если не хотите ходить по моим граблям, добро пожаловать под кат.
        Читать дальше →
      • Как ExpressionTrees помогают тестировать WebApi

        • Tutorial
        Всем хороши ApiController'ы, да не создают они WSDL и нельзя просто так взять и получить proxy. Да, ApiController'ы неплохо тестируются unit-test'ами. Но юниты пропускают ошибки транспортного уровня и в целом без парочки end-to-end сценариев как-то неудобно. Можно конечно смириться, взять HttpClient и написать примерно такой код:

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://localhost:56851/");
        
        // Add an Accept header for JSON format.
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));
        
        HttpResponseMessage response = client.GetAsync("api/User").Result;
        
        if (response.IsSuccessStatusCode)
        {
            var users = response.Content.ReadAsAsync<IEnumerable<Users>>().Result;
            usergrid.ItemsSource = users;
        
        }
        else
        {
            MessageBox.Show("Error Code" + 
            response.StatusCode + " : Message - " + response.ReasonPhrase);
        }
        

        Но как же это муторно каждый раз лезть в описание контроллеров, проверять типы, короче хочется вот так:
        var resp = GetResponse<SomeController>(c => gc.SomeAction(new Dto(){val = "123"}));
        

        Как выяснилось, это вполне можно реализовать применив немного уличной магии деревья выражений
        Читать дальше →
        • +11
        • 4,4k
        • 3
      • Планирование сроков и бюджетов для фрилансера

          Вот уже почти три месяца я уволился из офиса и работаю на «вольных хлебах». «Халтуры» попадались и до этого, но я не брал более одного проекта и делал лишь то, что входило в мою широкую, но не безграничную область компетенции.
          Я занимаюсь «программированием под ключ». Специализируюсь на проектах, требующих смежной компетенции, обычно я работаю с заказчиками долго — по нескольку лет. Я за то, чтобы исполнитель и заказчик работали вместе и помогали друг-другу найти оптимальное видение проекта. Мой процесс разработки выглядит так:
          Читать дальше →
        • Как релизится GitHub

            Yac 2013 посетил Jason Rudolph из GitHub. Я считаю его доклад про API был одним из самых интересных на конференции. Яндекс обещал выложить в сеть записи, так что советую на досуге посмотреть его всем, кто не видел.

            Но речь пойдет не о докладе. На картинке график релизов GitHub на продакшн.



            Когда я услышал цифру, я не поверил своим ушам. У GitHub'а сотни обновлений в неделю. В команде около сорока разработчиков и ни одного QA.

            К счастью Джейсон после доклада еще какое-то время находился рядом со сценой и я смог расспросить его с пристрастием о том как они это делают.
            Читать дальше →
          • The Good, the Bad and the Ugly code


              Хороший код или плохой? Лично для меня хороший код обладает следующими качествами:
              • Код легко понятен разработчикам разной квалификации и хорошо структурирован
              • Код легко изменять и поддерживать
              • Приложение выполняет свои функции и обладает достаточной, для выполняемого круга задач, отказоустойчивостью

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

              Почему именно эти критерии? Сразу оговорюсь, речь сейчас идет о разработке ПО для бизнеса (enterprise application). Критерии оценки кода для систем реального времени, самолетов, систем жизнеобеспечения и МКС отличаются.
              Читать дальше →
            • Continuous Integration для самых маленьких

              • Tutorial

              Вы все еще публикуете проект вручную? Тогда мы идем к вам


              Под катом гайдлайн по внедрению CI для .NET проектов «с нуля», включающий:
              1. Автоматические ежедневные сборки
              2. Уведомления о проблемах
              3. Интеграцию с баг-трекером и системой контроля версий
              4. Версионирование продукта
              5. Версионирование базы данных
              6. Автоматизированные выкладки и бекапы

              Читать дальше →
            • Исполняемая спецификация: SpecFlow от А до Я

              • Tutorial

              Эта статья является продолжением первой части и раскрывает технические подробности работы с «исполняемой спецификацией» с помощью SpecFlow.

              Для начала работы вам понадобится плагин к Visual Studio (скачивается с официального сайта) и пакет SpecFlow (устанавливается из nuget).

              Итак, наш Product Owner попросил команду разработать калькулятор…
              Под катом user stories, тестовые сценарии, автоматизация и запуски по расписанию из Team City
              • +15
              • 36,2k
              • 2
            • Data Driven Tests & SpecFlow

              • Tutorial
              SpecFlow позволяет использовать встроенные таблицы для Data Driven сценариев. В своей практике я столкнулся с двумя проблемами при таком подходе:
              1. Иногда хочется, наоборот, получить авто-документацию из теста (например, тестирование API)
              2. Когда количество данных велико, лучше хранить их где-то отдельно (часто для Acceptance Test Case'ов используют Excel)

              Покопавшись в Gesigner Generated коде я смог решить обе проблемы.

              Читать дальше →
              • +5
              • 10,1k
              • 4
            • Программисты-оптимисты


                Мы, программисты, — оптимисты. Это проявляется во всем цикле разработки ПО от оценки сроков до написания кода и внедрения. Как показывает моя практика, в разработке ПО законы Мерфи работают в 100% случаев. Несмотря на это, я раз за разом сталкиваюсь с «программистами-оптимистами».

                Топ «оптимистичных» допущений:
                Читать дальше →