• Борьба с хардкодами при помощи статических анализаторов С#

      В этой статье я расскажу, как мы написали собственные анализаторы кода и чистим с их помощью нашу кодовую базу .net от наиболее острых / частых косяков. Главный посыл — сделать это довольно просто, не бойтесь писать свои анализаторы для борьбы с именно вашими багами. Вторичный посыл — попробуйте наши анализаторы и сообщите о результатах. Полное руководство я писать не буду, их довольно много в интернете, а вот небольшой обзор, что это как и с какими проблемами я столкнулся, надеюсь, окажется вам полезным.
      Читать дальше →
    • 30+ инструментов для профессиональной разработки приложений под Android

      • Перевод
      image

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

      Эти инструменты помогли мне сэкономить много драгоценного времени из моей повседневной жизни, а также помогли мне создавать более качественные приложения. Поэтому, не теряя времени, давайте познакомимся с новыми и потрясающими инструментами для профессиональной разработки приложений под Android.
      Читать дальше →
      • +21
      • 7,8k
      • 4
    • Прагматичное функциональное программирование

      • Перевод

      Движение к функциональному программированию началось всерьез примерно десятилетие назад. Мы видели как такие языки как Scala, Clojure и F# стали привлекать внимание. Это движение было больше чем просто обычное восхищение «О, круто, новый язык!». Было что-то действительно побуждающее это движение — или мы так думали.

      Читать дальше →
    • EntityFramework: (анти)паттерн Repository

      Repository Pattern
      Репозиторий является посредником между слоем доступа к данным и доменным слоем,
      работая как in-memory коллекция доменных обектов. Клиенты создают декларативные
      описания запросов и передают их в репозиторий для выполнения.
        — свободный перевод Мартина Фаулера

      EntityFraemwork предоставляет нам готовую реализацию паттернов Repository: DbSet<T> и UnitOfWork: DbContext. Но мне часто приходится видеть, как коллеги используют в своих проектах собственную реализацию репозиториев поверх существующих в EntityFraemwork.


      Чаще всего используется один из двух подходов:


      1. Generic Repository как попытка абстрагироваться от конкретного ORM.
      2. Repository как набор запросов к выбранной таблице БД (паттерн DAO).

      И каждый из этих подходов содержит недостатки.

      Читать дальше →
    • Система управления складом с использованием CQRS и Event Sourcing. Service Layer



        В данной статье будет рассмотрен Service Layer в Magento 2 и сервисы (API интерфейсы) для управления сущностями, которые были описаны в предыдущей статье, посвященной проектированию и выделению доменных сущностей для системы управления складом (Inventory).
        Читать дальше →
      • Хороший код — наша лучшая документация

          Привет Хабр! Предлагаю вашему вниманию свободный перевод статьи «Good code is its own best documentation» от Amit Shekhar.

          image

          Хороший код, как хорошая шутка — не требует объяснений.
          Читать дальше →
        • Атака клонов. Как бороться с дублированием кода?

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


          В рамках данной статьи мне бы хотелось напомнить, что такое программные клоны, какие они влекут за собой проблемы и как с ними можно бороться. В статье приводятся примеры рефакторинга реальных клонов из популярного фреймворка Spring. В качестве инструментов используются Java 8, IDE IntelliJ IDEA 2017.1 и плагин Duplicate Detector 1.1.


          Читать дальше →
          • +15
          • 9,2k
          • 7
        • DeNet — платформа для децентрализованного web хостинга на базе блокчейн

            Привет! Меня зовут Шелестов Денис. Программировать начал с 7-ми лет. В 16 лет, учась в 9-м классе, основал свой первый стартап – Всемирный рейтинг программистов, на котором сейчас зарегистрировано более 70-ти тысяч кодеров – и на первой же презентации перед инвестором привлек инвестиции. Также являюсь сооснователем еще нескольких интересных бизнесов.

            Последние годы мы с командой занимаемся комплексной разработкой сайтов/сервисов/приложений, рекламой в гугле, яндексе, соц сетях и тд. Последние 2 года смотрели в сторону применения и постройки платформы на блокчейне и вот к чему наши поиски привели:

            У меня дома есть ноутбук как и у Вас, который постоянно подключен к интернету и никогда почти не выключается. Как-то раз я пошел в душ, где задумался о том, что у меня в доме стоит ноутбук, который может хостить 10 сторонних сайтов одновременно. Почему? Потому что максимальная нагрузка на сторонние сайты клиентов была 500-700 в день. И тут меня еще больше осенило. Почти у каждого из нас есть либо полностью неиспользуемые (постоянно) устройства, либо используемые но не всю мощность устройства. Я сейчас говорю про миллионы компьютеров подключенных к сети и находящихся в онлайне. Почему бы не сделать такую систему, в которой серверами будут выступать компьютеры обычных людей?

            У меня появилась такая идея — соединить компьютеры в единую сеть, где простые пользователи сдают в аренду мощность (и интернет) своих устройств, а кто-то кому это мощность нужна — берут в аренду нужное количество устройств. Получается, нужен какой-то продукт который будет использовать компы людей вместо серверов.

            И в первую очередь я подумал — децентрализованный хостинг
            Читать дальше →
          • Microservices и Модель Акторов (Actor Model)


              Доклад посвящен:

              • Пользовательским интерфейсам ориентированным на задачи (Task Based UI)
              • CQRS (Command/Query Responsibility Segregation)
              • Микросервисы
              • Закон Конвея и его влияние на примере организации команд в Magento
              • Fine-grained сервисы vs Coarse-grained сервисы
              • Синхронность vs Асинхронность
              • Модель Акторов (Actor Model)

              Вторая часть доклада находится под хабракатом.
              Читать дальше →
            • Интерфейс vs interface

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


                Часто сложность в понимании принципа "программируйте на уровне интерфейса" кроется в концентрации на инструменте, а не на смысле. Из-за наличия в Java ключевого слова interface, происходит искажение понимания принципа, и он превращается в "программируйте, используя interface". Так как в Python инструмент в виде ключевого слова interface отсутствует, некоторые питонисты пропускают этот принцип.


                В книге Банды Четырех примеры приводятся на Smalltalk и C++. Оба этих языка не имеют ключевого слова interface, но это не мешает авторам применять принцип, используя имеющиеся в распоряжении конструкции языка:


                У манипулирования объектами строго через интерфейс абстрактного класса есть два преимущества:

                • клиенту не нужно иметь информации о конкретных типах объектов, которыми он пользуется, при условии, что все они имеют ожидаемый клиентом интерфейс;
                • клиенту необязательно "знать" о классах, с помощью которых реализованы объекты. Клиенту известно только об абстрактном классе (или классах), определяющих интерфейс.


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

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

                Читать дальше →
                • +19
                • 7,3k
                • 7
              Самое читаемое