Контакты
Местоположение
Россия, Новосибирская обл., Новосибирск

Достижения

Все достижения (10)

Наибольший вклад в теги

Все теги (156)

Лучшие ответы пользователя

Все ответы (266)
  • Почему "ручной" foreach в три раза быстрее LINQ?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    А вы добавьте [MemoryDiagnoser] к вашему бенчмарку, сразу станет понятно.
    Linq аллоцирует память за счет использования итераторов внутри.
    А то что у вас в "ручном" методе, скорее всего, преобразуется компилятором в for с доступом по индексу и аллокаций там не будет.
    Ответ написан
  • Зачем нужен посетитель, если можно без него?

    sarapinit
    @sarapinit
    Точу водой камень
    Потому что в языках с сильной типизацией придется сначала привести к конкретному типу чтобы вызвать метод посетителя. Собственно ради решения этой проблемы шаблон и придумали. Также это известно под названием «двойная диспетчеризация»

    А можно поподробнее?
    Ответ написан
  • Существует ли в C# | - или между типами?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Нет, пока нельзя. В будущем возможно появится. В случае с Main вам нужно принимать массив строк и парсить их в нужный тип. В других случаях можно использовать object[] или ArrayList и приводить каждый элемент к нужному типу
    Ответ написан
  • В каких случаях использовать приватные поля при определении класса?

    sarapinit
    @sarapinit
    Точу водой камень
    если у вас typescript, вы можете так сделать

    class Rectangle {
      readonly x: number
      readonly y: number
      readonly w: number
      readonly h: number
        
      constructor(x: number, y: number, w: number, h: number) {
        this.x = x
        this.y = y
        this.w = w
        this.h = h
      }
    }
    
    class Canvas {
      private w: number
      private h: number
    
      constructor(w: number, h: number) {
        this.w = w;
        this.h = h;
      }	
    
      public drawRect(rect: Rectangle) {
        //draw implementation
      }
    }


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

    Рекомендую почитать про Rich model и Anaemic model, это даст некоторое понимание про разницу подходов и то какие плюсы\минусы есть.
    Ответ написан
  • Когда стоит разделять приложения?

    sarapinit
    @sarapinit
    Точу водой камень
    1 кейс.
    У вас есть запросы на которые нужно отвечать быстро (текущее состояние) и какой-то сервис с отчетами. Когда пользователи запрашивают большой отчет скорость ответа текущего состояния начинает проседать. Тогда вы делаете отдельный сервис для отчетов, выносите его в отдельное приложение и на отдельную виртуалку. Таким образом вы изолируете потребляемые ресурсы и устраняете влияние сервисов друг на друга. Плюс получаете возможность отдельно масштабировать сервис отчетов во времена наибольшей нагрузки.

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

    3 кейс.
    Вы делаете несколько сложных сервисов и решаете распаралелить разработку на несколько команд. Одна команда делает "Кинопоиск", другая "Афишу". Все они обращаются к серверу авторизации из кейса 2 и бекендам из кейса 1.

    Итог.
    Разделение на несколько приложений - это либо логическое разделение, когда приложения делают разные и несвязанные вещи. В этом случае удобно думать о разных задачах как о разных приложениях. Отдельно их разрабатывать, деплоить и т.д.
    Либо это управление вычислительными мощностями. Когда разные части системы требуют разделения ресурсов, нелинейного масштабирования или имеют совсем разный режим работы (например АПИ для загрузки фоток и асинхронный воркер который делает превьюшки для этих фоток)
    Либо это управление на уровне человеческих ресурсов, когда приходится вводить в разработку несколько команд.
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (2)