• Как правильно работать с исключениями в DDD

      image

      В рамках недавно прошедшей конференции DotNext 2018 состоялся BoF по Domain Driven Design. На нем был затронут вопрос работы с исключениями, который вызвал жаркий спор, но не получил развернутой дискуссии, поскольку не являлся основной темой.

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

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

      Есть разные мнения о том, стоит ли создавать собственные типы исключений или использовать стандартные, поставляемые в .NET.

      Кто-то делает валидацию на исключениях, а кто-то повсеместно использует монаду Result. Справедливо, что Result позволяет по сигнатуре метода понять, возможно ли не только успешное выполнение. Но не менее справедливо, что в императивных языках (к которым относится C#) повсеместное использование Result приводит к плохо читаемому коду, засыпанному конструкциями языка настолько, что с трудом можно разглядеть исходный сценарий.

      В данной статье я расскажу о практиках, принятых в нашей команде (если кратко — мы используем все подходы и ни один из них не является догмой).

      Речь пойдет об enterprise-приложении, построенном на базе ASP.NET MVC+WebAPI. Приложение построено по луковой архитектуре, общается с базой данных и брокером сообщений. Используется структурированное логирование в ELK-стек и настроен мониторинг при помощи Grafana.
      Читать дальше →
    • Обзор самых интересных докладов DotNext 2018: версия EastBanc Technologies

        Привет, хабровчане!

        Мы вернулись с конференции для .NET-разработчиков DotNext и честно делимся впечатлениями про самые запомнившиеся доклады. Надеемся, наш отзыв пригодится тем, кто будет смотреть видеозаписи выступлений.

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


        Читать дальше →
      • Как составить стратегию тестирования: версия настоящих инженеров

        • Tutorial
        Без стратегии тестирования можно наверняка обойтись, если есть бесконечное количество квалифицированных сотрудников, времени и денег. Словом, возможность пилить один релиз годами. В таких гипотетических идеальных условиях никакая стратегия не нужна, потому что вы можете тестировать ваш продукт всеми существующими способами как угодно долго, применяя техники в любом порядке, на несколько кругов, и рано или поздно каким-то путем вы придете к production ready качеству.

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

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


        Читать дальше →
        • +11
        • 8,8k
        • 9
      • Обзор самых интересных докладов Joker 2018: версия EastBanc Technologies

          Привет, хабровчане! В этом посте хотим поделиться своими впечатлениями от конференции для Java-разработчиков Joker 2018, что из услышанного нам запомнилось больше всего.

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



          Читать дальше →
        • Как организовать CI/CD на проекте: от постановки задач до настройки конвейера развертывания

          • Tutorial
          В чем залог успешной настройки Continuous Delivery на проектах? Слаженная работа команд разработки, тестирования и инженеров по инфраструктуре. Спасибо, кэп, как говорится :) Но как это реализовать на практике? В этой статье поделимся нашими наработками, как это всё организовать и воплотить в жизнь.

          Мы обобщили базовые основы в одну шпаргалку для себя и делимся с вами:


          Опытные инженеры вряд ли узнают из статьи что-то новое, но надеемся, что начинающим специалистам эта информация пригодится.


          Читать дальше →
        • Реактивное приложение без Redux/NgRx

          • Tutorial


          Сегодня мы детально разберем реактивное angular-приложение (репозиторий на github), написанное целиком по стратегии OnPush. Еще приложение использует reactive forms, что вполне типично для enterprise-приложения.

          Мы не будем использовать Flux, Redux, NgRx и вместо этого воспользуемся возможностями уже имеющимися в Typescript, Angular и RxJS. Дело в том, что данные инструменты не являются серебряной пулей и могут внести излишнюю сложность даже в простые приложения. Нас об этом честно предупреждают и один из авторов Flux, и автор Redux и автор NgRx.

          Но эти инструменты дают нашим приложениям очень приятные характеристики:

          • Predictable data flow;
          • Поддержка OnPush by design;
          • Неизменяемость данных, отсутствие накопленных side effect-ов и прочие приятные мелочи.

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

          Как вы сами убедитесь к концу статьи, это довольно простая задача — если убрать из статьи детали работы Angular и OnPush, то остается лишь несколько простых идей.
          Читать дальше →
        • Как распознавание лиц помогает находить тестовые телефоны

            Привет, хабровчане! В EastBanc Technologies ведётся большое количество проектов, связанных с мобильной разработкой. В связи с чем необходим целый зоопарк устройств для тестирования на всех этапах. И, что характерно, каждый отдельный девайс постоянно оказывается нужен самым разным людям, а найти его даже в одном отделе мобильной разработки из нескольких десятков человек — это целая история. Не говоря уже о том, что есть тестировщики, дизайнеры, PM’ы, в конце концов!

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

            image
            Читать дальше →
            • +23
            • 6,5k
            • 2
          • UI-тестирование: проверка системы на разных разрешениях

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

              В этой статье на Хабр расскажем о нашем опыте тестирования больших экранов инструментами Protractor, Zalenium и Selenium-grid. Как мы поэтапно внедряли эти инструменты автоматического UI-тестирования и через какие сложности нам пришлось пройти.


              Читать дальше →
            • Найдена формула безболезненного перехода на .Net Core

                На все про все достаточно 50 чашек кофе.


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


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


                Читать дальше →
              • «Storytelling with Data», Cole Nussbaumer Knaflic: неформальный обзор-конспект книги

                  «Наши сайнтисты сгенерировали кучу графиков, а мы совершенно не знаем, куда их девать. Давайте попробуем их хоть как-то пристроить». (с) подслушано

                  «Плохие графики везде. В моей работе я постоянно встречаю крайне сомнительные визуализации данных. Никто не делает плохие графики намеренно. Но это происходит. Опять и опять. В каждой компании во всех отраслях экономики сотрудниками всех уровней. Это происходит в СМИ. Это происходит там, где вы ожидаете, что люди должны уметь визуализировать данные». (с) автор книги

                  Это происходит и здесь, на Хабре: просматривая статьи в потоке «Визуализация данных», часто ловлю себя на мысли, что не понимаю и не могу схватить суть того, что отображено. В статье рассмотрим несколько примеров. И что самое неприятное для меня, это происходит и в моей работе тоже. Не постоянно, но чаще, чем хотелось бы.



                  Название книги «Storytelling with Data» звучало убедительно. Выбрал её для вечернего чтения и не пожалел. В книге нет формул, хитрых и необычных графиков, сложных кейсов. Понятный английский. Качественная печать. Читается как художественная литература. Книга будет полезна всем, кому приходится делать презентации на основе данных. Думаю, что особенную пользу она принесёт тем, кто занимается аналитикой данных.

                  Этот обзор очень неформальный: вперемешку идут мысли автора книги, мои мысли, ситуации из моей работы, а также шпаргалки по matplotlib по ссылкам. Будет много картинок. Почти все иллюстрации перерисованы из книги на Python.
                  Читать дальше →
                  • +18
                  • 4,3k
                  • 1
                • Как мы пишем статьи на Хабр: опыт разработчиков EastBanc Technologies

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

                    Для начала достаточно ответить на два простых вопроса:

                    • Зачем это мне?
                    • Что я расскажу интересного и полезного хабраобществу?

                    После чего можно взять план из этой статьи (или придумать свой) и сделать это.

                    image

                    Есть творческие этапы и технические. В этой статье поговорим о творческих. Рассмотрим:

                    • Зачем писать статьи,
                    • Откуда взять тему для статьи,
                    • Где найти время, чтобы её написать,
                    • Основные этапы работы над текстом,
                    • Что делать, если статья «не идёт»,
                    • И с чего начать, если ты ни разу не писал на Хабр.

                    Надеемся, что текст пригодится и другим авторам Хабра, в том числе потенциальным.
                    Читать дальше →
                    • +11
                    • 1,7k
                    • 5
                  • Создание приложения на .NET Core и Kubernetes: наш опыт

                      Всем привет!

                      Сегодня расскажем об опыте одного из наших DevOps проектов. Мы решили реализовать новое приложение под Linux с использованием .Net Core на микросервисной архитектуре.

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

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

                      Поэтому использовали такие технологии:

                      • .Net Core для реализации микросервисов. В нашем проекте использовалась версия 2.0,
                      • Kubernetes для оркестрации микросервисов,
                      • Docker для создания образов микросервисов,
                      • шина интеграции Rabbit MQ и Mass Transit,
                      • Elasticsearch и Kibana для логирования,
                      • TFS для реализации конвейера CI/CD.

                      В этой статье поделимся подробностями нашего решения.



                      Это расшифровка нашего выступления на .NET-митапе, вот ссылка на видео выступления.
                      Читать дальше →
                    • Как мы уместили таблицы в экран смартфона и унифицировали в рамках дизайн-системы

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

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

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

                        Для дизайн-проектирования это ставит нам 2 задачи:

                        1. Превратить большое в маленькое – перевести объемные списки в мобильное представление.



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

                        В этой заметке поделимся тем, как мы подходили к решению задач перевода таблиц в списки и унификации представления разных списков.
                        Читать дальше →
                        • +20
                        • 7,1k
                        • 5
                      • Запуск кластера RabbitMQ в Kubernetes

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

                        В наших решениях мы используем интеграцию и с помощью Kafka, и с помощью gRPC, и с помощью RabbitMQ.

                        В этой статье мы поделимся нашим опытом кластеризации RabbitMQ, ноды которого размещены в Kubernetes.

                        image

                        До RabbitMQ версии 3.7 его кластеризация в K8S была не очень тривиальной задачей, со множеством хаков и не очень красивых решений. В версии 3.6 использовался autocluster плагин из RabbitMQ Community. А в 3.7 появился Kubernetes Peer Discovery Backend. Он встроен плагином в базовую поставку RabbitMQ и не требует отдельной сборки и установки.

                        Мы опишем итоговую конфигурацию целиком, попутно комментируя происходящее.
                        Читать дальше →
                      • Что вас ждёт до, после и во время перехода на Kubernetes – бизнесу на заметку

                          Всем привет!

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


                          Читать дальше →
                        • Рецепт гладкого релиза: PMy на заметку

                          • Tutorial
                          Всё ближе момент, когда мы выпустим в свет наше решение, свежее, новенькое и сияющее. Волнительно? Не очень, ведь мы его уже проверили со всех сторон.

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

                          На основе этого плана мы ставим задачи разработчикам и «аудиторам» — коллегам из других отделов, которые проводят ревью решения (да, это тоже лайфхак). Надеемся, эта шпаргалка пригодится для подготовки к релизу продукта в прод.


                          Читать дальше →
                          • +12
                          • 3,8k
                          • 3
                        • Распознавание товаров на полках с помощью нейронных сетей на технологиях Keras и Tensorflow Object Detection API

                            В статье мы расскажем о применении свёрточных нейронных сетей для решения практической бизнес-задачи восстановления реалограммы по фотографии полок с товарами. С помощью Tensorflow Object Detection API мы натренируем модель поиска/локализации. Улучшим качество поиска мелких товаров на фотографиях с большим разрешением с помощью плавающего окна и алгоритма подавления немаксимумов. На Keras реализуем классификатор товаров по брендам. Параллельно будем сравнивать подходы и результаты с решениями 4 летней давности. Все данные, использованные в статье, доступны для скачивания, а полностью рабочий код есть на GitHub и оформлен в виде tutorial.
                             

                            Читать дальше →
                            • +26
                            • 10,4k
                            • 8
                          • Конспект книги Practical Guide to Testing in DevOps, Katrina Clokie

                              Книга рассказывает, как выстроить тестирование, чтобы не просто вылавливать баги, а избежать их появления. Она нам очень понравилась, так что мы решили на правах старожилов поддержать традицию конспектов на Хабре и выложить самые интересные тезисы.


                              Читать дальше →
                            • MassTransit, Saga и RabbitMQ для реализации диспетчера процессов

                                Однажды перед нами встала задача автоматизировать различные workflow в крупной компании. Для нас это значило соединить воедино на момент старта порядка 10 систем. Причем связать всё надо было асинхронно, масштабируемо, надежно.


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


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


                                image

                                Читать дальше →
                              • Центр уведомлений. Приручаем 200+ рассылок

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

                                  Наша система отправляет 206 различных уведомлений из 35 систем девятью способами. Вот такой фронт работ. Как для этой махины мы создавали единую коммуникационную платформу — центр уведомлений — рассказываем под катом.


                                  Читать дальше →

                                Самое читаемое