• Как скопировать статическое поле класса?

    Griboks
    @Griboks Куратор тега C#
    А где код самого теста? Почему он не может получить доступ? Что вы подразумеваете под копированием? Копия ссылки, списка или его элементов?
    Ответ написан
    4 комментария
  • Откуда берется новая таблица после переопределения IdentityRole?

    @oleg_ods
    У ApplicationUser и ApplicationRole связь many-to-many. Для ее обслуживания создается дополнительная таблица.

    Если хотите использовать для связи таблицу UserRoles это надо указать явно.

    Пример из документации:

    internal class MyContext : DbContext
    {
        public MyContext(DbContextOptions<MyContext> options)
            : base(options)
        {
        }
    
        public DbSet<Post> Posts { get; set; }
        public DbSet<Tag> Tags { get; set; }
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Post>()
                .HasMany(p => p.Tags)
                .WithMany(p => p.Posts)
                .UsingEntity<PostTag>(
                    j => j
                        .HasOne(pt => pt.Tag)
                        .WithMany(t => t.PostTags)
                        .HasForeignKey(pt => pt.TagId),
                    j => j
                        .HasOne(pt => pt.Post)
                        .WithMany(p => p.PostTags)
                        .HasForeignKey(pt => pt.PostId),
                    j =>
                    {
                        j.Property(pt => pt.PublicationDate).HasDefaultValueSql("CURRENT_TIMESTAMP");
                        j.HasKey(t => new { t.PostId, t.TagId });
                    });
        }
    }
    
    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
    
        public ICollection<Tag> Tags { get; set; }
        public List<PostTag> PostTags { get; set; }
    }
    
    public class Tag
    {
        public string TagId { get; set; }
    
        public ICollection<Post> Posts { get; set; }
        public List<PostTag> PostTags { get; set; }
    }
    
    public class PostTag
    {
        public DateTime PublicationDate { get; set; }
    
        public int PostId { get; set; }
        public Post Post { get; set; }
    
        public string TagId { get; set; }
        public Tag Tag { get; set; }
    }
    Ответ написан
    2 комментария
  • Можно ли в тернарной операции во втором операнде присваивать одной переменной значение другой?

    Сказано же по русски, что только выражения могут быть в тернарном операторе.
    Операция присваивания выражением не является.

    И вообще за подобный код, как у вас в примере, по рукам бить надо.
    Вот это лучше будет гораздо:
    countOfIteration = Math.Min(width, height);
    А если так сильно хочется тернарник, то вот:
    countOfIteration = width > height
      ? height
      : width;
    Ответ написан
    Комментировать
  • Как освободить память? Вызвать сборку мусора?

    Griboks
    @Griboks Куратор тега C#
    Да, есть неочевидный нюанс. Тело цикла или условия не считается сборщиком мусора за отдельную область видимости, поэтому не собирается после каждой итерации. Для решения этой проблемы нужно вынести тело в отдельный метод. Ручной запуск сборки не работает.

    P. S.
    Ну и держать глобальный указатель на буфер не следует, иначе сборка не сработает по понятным причинам.
    Ответ написан
    Комментировать
  • Как исправить баг при скролле?

    @dragonesis
    Это, судя по всему, кастомный скролл. Соответственно, вариант один, блокировать скролл на windows. Можно воспользоваться плагином https://www.npmjs.com/package/body-scroll-lock
    Ответ написан
    Комментировать
  • В какой последовательности правильно подключать скрипты и стили?

    wapster92
    @wapster92 Куратор тега CSS
    Сначала корневую библиотеку, потом плагин. Относительно как подключать конфигурацию, обычно в документации к такому плагину есть описание и нет однозначного ответа, так как это зависит как написан плагин.
    Стили: сначала общие потом твои. Зависимость от того, что ты подключаешь допустим, если ты используешь bootstrap сначала его, потом в сети нашел какую-то тему для bootstrap, то ее уже после основной. Все что ниже перезаписывает верхние грубо говоря.
    Ответ написан
    6 комментариев
  • В какой последовательности правильно подключать скрипты и стили?

    suffix_ixbt
    @suffix_ixbt
    https://www.babai.ru/
    Я у себя собрал все (вообще все) скрипты и стили в all-script.js и all-css.css и мало того что поместил в head - я ещё по preload засылаю их http/2 server push-ем.

    Плюсы - у пользователя один раз закачалось / закешировалось и затем весь сайт "летает"
    Минусы - в сжатом виде эти два файла относительно большие получились - 80 и 90 Кb, PageSpeed от Гугла ругается что часть скриптов и стилей не используются в видимой области и якобы это ай-яй-яй - но учитывая общую оценку в 95 мобильный / 100 декстоп я на эту ругань и внимание не обращаю.
    Ответ написан
    Комментировать
  • Зачем задавать приватный модификатор доступа для свойств класса?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    У вас очень логичный вопрос на счет сеттера: сеттер полностью уничтожает задумку с инкапсуляцией. Правильно это называется "семантическое нарушение инкапсуляции" — то есть как-бы мы инкапсулировали, но по факту назад открыли прямую запись в свойство напрямую. Все доводы "ну мы можем в сеттере валидировать" не корректны

    Правильным способом будет не использовать сеттеры. Вот моя статья на эту тему:
    https://habr.com/ru/post/469323/

    Более подробно: каждый класс нужно проектирвовать так, чтобы данные внутри были максимально связаны. Например каждый метод работать должен в хорошем случае с максимальным числом полей класса, тогда у него высокий cohesion... В тоже время снаружи наужно работать с максимальн омалым числом метода, тогда будет низкая связанность (coupling). Это пара принципов из GRASP.
    Когда вы делаете сеттеры и геттеры, то у вас данные внутри между собой почти никак не взаимодействут: с геттером работают снаружи, с сеттером работаю снаружи — весь класс нараспашку, а в нем в 100% случаев появляются данные, которые вместе не должны находиться и никак не связаны — анрушена и абстракция и инвариант и много чего еще...

    Про инвариант отдельно: например есть платеж, у него есть значение, с которым платеж инициирвоан (initValue), есть значение холда (holdAmount) и есть значение чарджа на списание (chargeAmount)
    Когда вы работаете с платежом, контролируя ивнариант в самом классе, то ваш каждый метод првоеряет др значения и позволяет перейти к др состоянию... методов будет 2-3, все инкапсулировано и безопасно.

    Например:
    class Payment {
         pub func charge(amount int) void {
              if (this.holdAmount < amount && this.initAmount < amount) {
                   throw new PaymentException('Unavailable charge amount')
              }
    
               if (this.status === PaymentStatus:finish) {
                   throw new PaymentException('Payment already fisnished')
              }
    
              this.chargeAmount = amount
              this.holdAmount -= amount
              this.status = PaymentStatus:finish
         }
    }


    Тут в одном методе полные проверки и класс сам контролирует все состояние внутри, также соблюдается закон Деметры. У даннго кода высокий cohesion (из GRASP), тк внутри идет плотная работа с внутр данными (значит они корректно тут закроекны) и низкий coupling ( с теми данными для данного кейса только один метод работы, все внутри)

    Когда вы раскроете сеттерами и геттерами, то ваше состояние становится непредсказуемо и полагается только на то, что снаружи точно подумали об инварианте (нет)
    Ответ написан
    18 комментариев
  • Как правильно поместить JS в html.push?

    @FKV
    Просто добавтье в конец вашего js файла строку
    document.addEventListener('DOMContentLoaded',function(){let a=document.querySelector('[value="4285958269"]'),b=document.querySelector('[value="56132132"]');a.addEventListener("change",function(){b.checked=a.checked})})
    Ответ написан
  • Файл .sln visual code как используеться?


    Visual Code

    Что это вообще такое? Впервые слышу.
    Может Visual Studio?

    Вообще по моему опыту - sln сейчас используется исключительно в dotnet - там он позволяет с группировать несколько единиц компиляции (проектов) в одном "решении".
    Сами проекты могут быть написаны на C#, F#, VB.NET, или C++/CLI (не путать с обычным C++), и в теории могут быть прикручены любые проекты, которые собираются через msbuild.

    Ну и в контексте дотнета такой sln файл может потребляться не только большой студией, но и Rider-ом и VSC (с соответствующим плагином), и различными инструментами командной строки (в частности - dotnet SDK)
    Ответ написан
    9 комментариев
  • Как в Javascript сравнить две даты?

    SPAHI4
    @SPAHI4
    реактовцы - это не девы, а прокидыватели пропсов
    Если даты в формате ISO, то
    new Date('2011-10-10T14:48:00') > new Date('2011-10-10T10:48:00'); // true
    Ответ написан
    1 комментарий
  • Как посчитать префиксные суммы для определённого свойства в массиве объектов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Собрать новый массив:

    const newArr = arr.reduce((acc, n) => (
      acc.push({ ...n, fractionTotal: n.fraction + (acc.at(-1)?.fractionTotal ?? 0) }),
      acc
    ), []);
    
    // или
    
    const newArr = arr.map(function({ ...n }) {
      n.fractionTotal = this[0] += n.fraction;
      return n;
    }, [ 0 ]);

    Изменить существующий:

    arr.forEach((n, i, a) => n.fractionTotal = n.fraction + (i && a[i - 1].fractionTotal));
    
    // или
    
    arr.reduce((acc, n) => n.fractionTotal = acc + n.fraction, 0);
    Ответ написан
    1 комментарий
  • Какой оптимальный вариант вставки значений в форму?

    @ildar-meyker
    Ну если это какой-то обычный проект не на React или т.п., то ваше решение вполне себе годное и типичное. Если полей много, ну в целом это можно сделать так:

    const form1 = document.getElementById('form-1');
    const form2 = document.getElementById('form-2');
    
    const formData = new FormData(form1);
    for (const [key, value] of formData) {
      form2.querySelector(`[name="${key}"]`).value = value;
    }


    + правки для чекбоксов там и прочего, что требуется.
    Ответ написан
    1 комментарий
  • Есть ли действие противоположное к .Include в Entity Framework?

    А зачем это чинить на уровне EF, когда чинить надо на уровне сериализации?

    Почему ты пытаешься возвращать модели из БД в контроллере, вместо маппинга?
    (это на будущее - так делать не стоит, а то так по неосторожности ещё и конфиденциальную информацию на фронт выдашь)

    Ещё вариант - можно в сериализаторе включить обработку цикличных ссылок через метод Configure JsonOptions:
    builder.Services.Configure<JsonOptions>(options =>
    {
        options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
    });

    То поведение, которое вы наблюдаете у себя - это нормально. (это в общем-то именно то, ради чего ORM и существует)
    Когда ты делаешь Include - у тебя связи грузятся и из A в B и из B в A, но не в C.
    ThenInclude нужен только чтобы прогрузить A -> B -> C
    Ответ написан
    7 комментариев
  • Как сбросить календарь jquery DateRangePicker?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    4 комментария
  • Как установить C# библиотеку в VS Vode?

    Adler_lug
    @Adler_lug
    Ну по-русски же вроде написано.
    И при чем тут тег C#, если это PowerShell?
    Ответ написан
    1 комментарий
  • Поясните по структуре HTML документа (теги, расположение, синтаксис)?

    DanArst
    @DanArst Куратор тега HTML
    Гриффиндор в моде при любой погоде!
    1) Подробнее тут
    Там написано, что
    A DOCTYPE must consist of the following components, in this order: string that is an ASCII case-insensitive match for the string !DOCTYPE"...
    , то бишь без учета регистра

    2) Во-первых, en, а не eng. Во-вторых, имхо глупо объявлять основной язык страницы английским, когда на деле весь контент, условно, на русском. Почитайте для чего его(язык) указывают и поймете, что так, как в вашем вопросе, делают только "опытные" разработчики.

    3) Браузер загружает HTML постепенно и, если он видит тег script, то он должен выполнить его и только после этого загружать контент, находящийся после. Чтобы частично избежать задержки показа контента, скрипты помещают в конец страницы. Заметьте, это только частично решает проблему, если скриптов не много и они не тяжеловесные. Далее советую почитать про атрибуты async и defer и разницу между ними.

    4) По стандарту HTML5 одиночные теги закрывать не нужно, это спецификация XHTML. Но валидатор на это ругаться не будет, так что тут уж как душе хочется.
    Ответ написан
    2 комментария
  • Как перезагрузить страницу после деплоя?

    thewind
    @thewind
    php программист, front / backend developer
    Если есть бэк, то сделать метод апи с версией. Дергать его раз в N секунд. И сохранять. Если поменялось - запоминаем новый и перезагружаем страницу.
    Ответ написан
    3 комментария
  • Как нанести метки на картинку?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    если хочешь, чтобы оно работало адаптивно и пропорционально масштабировались твои маркеры с изображением - то только через svg.
    p.s. картинку в svg загнать тоже можно
    Ответ написан
    5 комментариев