• Как читать эту строчку?

    @vabka
    Fullstack dev
    CreateHostBuilder() - это метод, который объявлен ниже, он возвращает IHostBuilder
    Build() - это метод IHostBuilder, он возвращает собранный IHost
    Run() - это Метод-расширение на IHost

    Мой личный совет: сначала изучите основы языка, а потом уже приступайте к аспнету, иначе у вас на каждом шагу будут возникать тупые вопросы.
    Ещё обратите внимание на refactoring.guru
    Ответ написан
  • Объясните разницу между технологиями?

    firedragon
    @firedragon
    Senior .NET developer
    * asp - что то типа php, но с vb и js и вызовами COM
    * asp.net - то же самое но более навороченное, под капотом .net framework и событийная модель, типа как в windows
    * .net framework - платформа для кучи языков, основнаю плюшка в контроле памяти
    * .net core - развитие * .net framework, отвязанное от windows во многих смыслах
    * .net - тоже что и .net framework хотя впрочем в широком смысле все технологии
    * asp.net mvc - реализация патерна mvc в отличие от * asp.net менее затратен и более прям, но все приходится писать руками
    .net mvc, см * asp.net mvc
    .net core mvc см * asp.net mvc но на .net core
    Ответ написан
  • Возможна ли публикации автономного ASP.NET Core приложения (сайта)?

    firedragon
    @firedragon
    Senior .NET developer
    Примерно неделю назад такое делал. Elf плюс конфиг. Ну и конечно настройка nginx. Если интересно чуть позже скину конфиги
    Ответ написан
  • Какую книгу надо читать для изучения движка Unity в 2020 году?

    Забудь про Гошу Дударя!) Я тоже относительно недавно начал изучать все это...но уже знаю всех инфоциганов в этой сфере)
    Ответ написан
  • Как использовать переменную типа char?

    FoggyFinder
    @FoggyFinder
    Давайте попробуем разобраться.

    Массив это ограниченный набор некоторых данных определенного типа.

    char[] notAllowedSymbols = { '!', '#', '$', '%', '&', '(', ')', '*', ',', '+', '-' };

    здесь, вы объявили массив элементов типа char.

    Для доступа к значению в массиве используются индексы.

    Первый элемент в массиве доступен по индексу 0.
    Второй - по индексу 1.
    и так далее.

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

    Теперь возвращаемся к нашему массиву notAllowedSymbols.

    Как теперь, учитывая информацию об индексах, получить доступ к какому-нибудь элементу? В C# для это есть индексаторы:

    массив[индекс]


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

    var firstChar = notAllowedSymbols[0]; // '!'

    точно также можно получить любой другой элемент указав правильный индекс ([i]).

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

    Здесь лучше всего подойдут функции. Вынесем проверку отдельно. Ее результатом может быть или "пройдена успешна" или "содержит ошибки". Всего два значения. Значит, здесь удобно воспользоваться типом bool. True будет означать что пароль подходящий и False будет символизировать ошибку.

    Теперь сама реализация

    private static bool IsValid(string password)
    {
        char[] notAllowedSymbols = { '!', '#', '$', '%', '&', '(', ')', '*', ',', '+', '-' };
    
        for (int i = 0; i < notAllowedSymbols.Length; i++)
        {
            if (password.Contains(notAllowedSymbols[i]))
            {
                return false;
            }
        }
        return true;
    }
    Ответ написан
  • Что сейчас используют чаще web api или mvc (asp.net core)?

    sarapinit
    @sarapinit
    Точу водой камень
    Просто апи в случае single page application, или веб сервиса без ui.
    MVC если хочется быстро сделать сайт с формами.

    Но граница очень размыта, знать одно и не знать другого, практически невозможно, и вопрос становится бессмысленным.
    Это разделение было сделано когда-то просто чтобы было 2 шаблона проекта в visualstudio, так что не советую на этом концентрироваться а изучать aspnetcore в целом
    Ответ написан
  • Правильна ли реализация АПИ: new Car().Run(100)?

    Я бы переписал этот код так:
    public abstract class Transport {
        public int MaxSpeed { get; private set; }
    
        public Transport(int maxSpeed) {
            MaxSpeed = maxSpeed;
        }
    
        public string Run(int speed)
            => $"Скорость движения транспорта {(speed <= MaxSpeed ? "в пределах нормы" : "выше максимальной")}";
    }
    
    public class Car : Transport {
        public Car() : base(300) {}
    }
    
    public class Bike : Transport {
        public Bike() : base(40) {}
    }
    Ответ написан
  • Какую технологию для бекенда проще освоить?

    Chronicler
    @Chronicler
    Программист
    C# и мощнее и проще во всех отношениях. Каждый раз выбирая JS вы выбираете всю боль динамической и при этом одновременно нестрогой типизации.
    Кроме того, C# разработан тем же человеком, что разрабатывал раньше Delphi.
    Ответ написан
  • Какую технологию для бекенда проще освоить?

    @sergeyiljin
    Делаю дело
    Если с делфи работал, то шарп лучше зайдёт.
    Ответ написан
  • Какая есть литература для изучения ASP.NET MVC?

    sarapinit
    @sarapinit
    Точу водой камень
    Вот это и вот это покрывают тему примерно на 98%.

    Актуальнее учить Core.
    Ответ написан
  • Как запретить доступ для юзеров с VPN?

    @ky0
    Миллиардер, филантроп, патологический лгун
    От накручивания не баны впнов помогают, а верификация. Например, по номеру телефона.
    Ответ написан
  • Внешнее подключение к локальному iis express?

    kreo_OL
    @kreo_OL Автор вопроса
    Медузко -_-
    Решение проблемы вышло в три пункта
    1. Необходимо запустить именно сбилженный сервер - от ide не работает вообще ни как кроме локалхост.
    2. В моем случае необходим https. Но не знаю почему, но помогло только прописать оба порта
    .UseStartup<Startup>().UseUrls("http://192.168.88.6:6666", "https://192.168.88.6:6669");

    Если общаться на 6666 то приходит что необходимо пойти на 6669. А вот если прописать только один порт в UseUrls, то приходит то самое "Error: connect ECONNREFUSED 192.168.88.6:6666" (или 6669).
    3. Первые два пункта помогли увидеть сервер в локальной сети. и только включение службы iss в компонентах виндовс дало доступ из вне
    spoiler
    5f3ef0fd41527473603034.png


    Кстати если не делать пункт 2, а третий сделать, то все ровно ничего не работает ни на каком порту.)

    Надеюсь сюда придут знающие, и расскажут почему все именно так.
    spoiler
    Если смущает путаница портов в вопросе и ответе, то это изза того что я в отчаиние применял научный тык.
    Ответ написан
  • Как переделать код (см. внутри)?

    FoggyFinder
    @FoggyFinder
    Давайте попробуем вместе разобраться как решать подобные вопросы.

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

    Ваша задача убрать использование пространства имен System.Drawing.

    Что для этого нужно сделать?
    1. Убрать вверху заголовочный using
    using System.Drawing;
    2. Удалить ссылку на сборку

    Теперь пробуем скомпилировать проект, получаем ошибки:

    error CS0246: Не удалось найти тип или имя пространства имен "Point" (возможно, отсутствует директива using или ссылка на сборку)


    Значит вопрос можно переформулировать примерно следующим образом:

    Чем можно заменить класс Point из System.Drawing?


    Согласитесь, что чем более конкретен вопрос тем легче на него ответить.

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

    Компилятор пишет что нужен класс? Окей, давайте создадим класс

    class Point
    {
    
    }


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

    if (field[i, j] == "0") current = new Point(i, j);

    1>error CS1061: "Point" не содержит определения "X", и не удалось найти доступный метод расширения "X", принимающий тип "Point" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).


    if ((i == current.X) && (j == current.Y))


    1>error CS1061: "Point" не содержит определения "Y", и не удалось найти доступный метод расширения "Y", принимающий тип "Point" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
    1>error CS1061: "Point" не содержит определения "Y", и не удалось найти доступный метод расширения "Y", принимающий тип "Point" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).


    Кажется, все понятно. Мы пытаемся использовать несуществующий конструктор и несуществующие свойства.

    Добавляем все необходимое. Компилятор ругается на два свойства и ожидает увидеть конструктор с двумя параметрами? Ага, зависимость видна - каждому параметру соответствует свое свойство с названиями X и Y соответственно.

    Как определить их тип? Смотрим что мы пытаемся туда передать? i , j - целые числа - int. Значит его и ставим.

    class Point
    {
        public int X { get; set; }
        public int Y { get; set; }
    
        public Point(int x, int y)
        {
            X = x;
            Y = y;
        }
    }


    Пробуем скомпилировать? Ошибок нет, можно переходить к этапу проверки работоспособности.
    Ответ написан
  • Как использовать DDD?

    @EvgeniiR
    https://github.com/EvgeniiR
    Пусть статья и комментарии будут разными агрегатами. У комментариев будет свой домен.

    Можно в контексте комментариев сделать свой класс статьи( Article ). Он даже не будет сущностью:
    class Article {
      private UUID id;
      
      private CommentsRepository comments;
      
      ...
      
      public void function addComment(commentData: commentData) {
        this.coments.add(new Comment(this.id, commentData));
      }
    }


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

    И да, в данном случае мы имеем дело просто с декомпозицией системы, к реальному DDD это мало отношения имеет, потому что domain-driven-design, он domain-driven за счёт того что конексты обсуждаются с бизнесом, а не придумываются разработчиком, в данном случае мы просто берём оттуда немножко терминологии потому что она уже стала довольно общей.
    Ответ написан
  • Что НЕ стоит начинать изучать в ближайшем будущем?

    maksim92
    @maksim92
    Нашёл решение — пометь вопрос ответом!
    Всё, кроме того что советуют учить по теме: «Что учить новичку в 2020?»
    Ответ написан
  • На каком языке сейчас чаще всего программируют микроконтроллеры?

    @0x131315
    Тут чистая экономика.
    Контроллеры ставят в основном в массовые устройства.
    Это значит что каждый сэкономленный доллар - это десятки, а то и сотни миллионов прибыли на ровном месте.
    Подобные суммы с лихвой покрывают время программистов, поэтому им ставят задачу уложить функционал на самый дешёвый контроллер, который ещё хоть как-то способен потянуть этот функционал.
    Отсюда - высокая степень оптимизации кода при работе с контроллерами.
    Нужно максимально использовать все особенности конкретного контроллера - программисты много работают с даташитом.
    Язык должен позволить максимально полно использовать систему команд конкретного контроллера, и гибко управлять регистрами и памятью контроллера.
    Поэтому в ходу в основном ассемблер - с ним можно писать максимально компактный код.
    Но функционал зачастую достаточно большой, чтобы его целиком писать на ассемблере.
    Поэтому, в целях экономии времени, пишут на Си, с использованием библиотек, а самые ответственные места реализуют с помощью ассемблерных вставок.
    Благодаря этому удается реализовать почти все преимущества и ассемблера и Си: быстрая и достаточно полно контролируемая разработка, с достаточно компактным и быстрым кодом.

    С симками ситуация иная - там важно было реализовать кроссплатформенный код. Поэтому используют java, не смотря на ресурсы.

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

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

    Так что все зависит от здравого смысла и стоимости.
    Просто так везде пихать java - немного глупо.
    Ответ написан
  • ASP.NET Core несколько страниц или несколько if?

    @d-stream
    Готовые решения - не подаю, но...
    Видимо стоит подумать на тему "а что будет, если внезапно потребуется еще одну-две-двадцать-двести вывести?"
    Ответ написан
  • Java на уровне железа, отличия от C++?

    gbg
    @gbg
    Баянист. Тамада. Услуги.
    Авторы надеялись, что к железу можно будет обращаться с помощью абстракций - производитель железа у себя реализует java-машину, а уж сверху нее можно запускать прикладной код.

    Вы забываете о большом пласте истории техники, который был сильно до этого - 8 битные домашние ЭВМ (десятки их) и язык Бейсик.

    Так вот, ЭВМ того времени были катастрофически разными - разные носители (кассеты, дискеты, картриджи), разная аппаратура (засунуть еще один центральный процессор в дисковод? да нивапрос! разная скорость для PAL и NTSC версий - легко!). Но вот бейсик был везде и позволял, с некоторыми переделками, таскать программы с машины на машину.

    Таким образом, авторы находились в этом историческом контексте (у них все детство прошло в обнимку с каким-нибудь VIC-20). Тут уже становится логичным желание сотворить то же самое, только круче - берем современный язык, стандартизируем синтаксис - и делаем аналогично - производитель железа предоставляет нам Java-машину с нужным уровнем абстракции - и все программы бегают с архитектуры на архитектуру без переделок.

    Отчасти, это сработало на старых мобилках, в эпоху j2me - это как раз Java, засунутая в телефон - игры, браузеры, карты (были даже ЯндексКарты), читалки, чатилки - куча всего.

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

    Сейчас апплет на java можно встретить во всяком старом железе, на нем там сделано GUI для удаленного администрирования серверов, коммутаторов и СХД. Вы браузером заходите на железку, и тут на вас вываливается ворох предупреждений о том, что сейчас будет запущено какое-то ужасное дырявое ПО, держите штаны, а то слетят. Уверены? Точно уверены? А с этим согласны? А так?

    А уже потом начали активно применять JavaScript, главным образом, изобретя Ajax - продолжая люто натягивать сову (систему для создания электронных библиотек для ученых/HTML) на глобус (задачу создания интерактивного гуя с красивой версткой).

    И это вы еще бэк на Perle не рефакторили
    Ответ написан
  • Как реализовать свой маппинг обьектов в ASP NET CORE MVC?

    firedragon
    @firedragon
    Senior .NET developer
    Возможно стоит спросить у
    Мне сказали, что Автомаппер зло и его лучше не использовать

    И напомнить ему про принцип не изобретай очередной велосипед?
    Ответ написан