• Как вернуть Observable с агрегированным результатом других Observable?

    @kttotto Автор вопроса
    Та документации я за последние 4 часа начитался и методов насмотрелся) Другое дело как это применить.
    В комментарии выше я показал свой пример. Если не лень, оцените что не так, потому что у меня он не работает.
  • Как вернуть Observable с агрегированным результатом других Observable?

    @kttotto Автор вопроса
    Вот сейчас я накидал такой вариант, но ошибка запроса вылазит, так будто catch не срабатывает. Я хочу обернуть ошибочные запросы и вместо них вернуть заглушку.
    private getUserDictOneByOne(logins: string[]): Observable<UserDict> {
       const observables: Observable<UserDict>[] = [];
    
       logins.forEach(login => {
         observables.push(this.getUsersByLogins([login])
           .pipe(
             map(users => {
               const userDict = {};
               users.forEach(u => userDict[u.accountName] = u);
               return userDict;
             }),
             catchError(err => {
               console.log("Error getting user data: ", login);
               console.log(err);
               const userDict = {};
               const userBean = new UserBean();
               userBean.accountName = login;
               userDict[login] = userBean;
               return of(userDict);
             })));
       });
    
       return forkJoin(observables)
         .pipe(
           map((userDicts) => {
             const userDict = {};
             userDicts.forEach(u => Object.assign(userDict, u));
             return userDict;
           }));
     }
  • Действительно ли vue слабый фреймворк?

    @kttotto
    Andrey, вы видимо путаете уровни проектов. Если это лендинг, то там разницу не почувствуешь, js или ts. Если это долгоиграющий проект интерпрайз уровня, то в какой то момент js код становится трудноконтролируемым, добавление каждой новой фичи с каждым разом становится дороже, поддержка вообще становиться нереальной. И были проекты не единожды, которые начинались на js, но позже принимались решения продолжать фронт на vue и ts. Vue хорош тем, что его можно внедрять точечно, ts тем, что он дает больший контроль над кодом. И такие решения по качеству меня устраивают. Например, как раз последний проект мне пришел, чтобы ui компоненты переписать с js на vue с ts.
  • Действительно ли vue слабый фреймворк?

    @kttotto
    Andrey, сколько бы ни сказал - не проверишь, вопрос напоминает об измерении половых органов с целью выявления бОльшего. Я уже давно не студент и даже не после-студент, кол-во пройденных проектов больше, чем пальцев на двух руках, это считая только те, на которые с нуля уходило от полугода, до года.
  • Действительно ли vue слабый фреймворк?

    @kttotto
    Andrey, Что за бред. ООП потому и придумали, чтобы увеличить скорость разработки кода, его масштабируемость и поддержку. С точки зрения бизнеса, полноценной замены ООП нет. Вы можете писать большие проекты в процедурном стиле, откатившись в эволюции в 90-е. Можете в функциональном, но подумайте, почему он был придуман задолго до ООП, но вот реальные проекты все же объектами оперируют.
    И вот как раз если у заказчика нет много денег, он будет просить писать на ts, потому что куча стандартных js ошибок отлавливается ещё на стадии компиляции, а не в реалтайме. К необходимости ts потому и пришли, чтобы уменьшить время дебага и увеличить контроль над кодом..
  • Как обработать событие KeyDown для стрелок?

    @kttotto
    ITLDS, тогда попробуйте его переопределеить в форме как написано здесь
    protected override bool IsInputKey(Keys keyData)
        {
            if (keyData == Keys.Left || keyData == Keys.Right || keyData == Keys.Up)
            {
                return true;
            }
            else
            {
                return base.IsInputKey(keyData);
            }
        }
  • Как обработать событие KeyDown для стрелок?

    @kttotto
    В документации все очень доходчиво сказано
    Некоторые клавиши, такие как клавиши TAB, RETURN, ESC и клавиши со стрелками, обрабатываются элементами управления автоматически. Чтобы эти ключи вызвали событие KeyDown , необходимо переопределить метод IsInputKey в каждом элементе управления в вашей форме. Код для переопределения IsInputKey должен будет определить, нажата ли одна из специальных клавиш, и вернуть значение true. Вместо переопределения метода IsInputKey , вы можете обрабатывать PreviewKeyDown событие и установите для свойства IsInputKey значение true.
  • Как обработать событие KeyDown для стрелок?

    @kttotto
    ITLDS, Вы использовали обработчик PreviewKeyDown и установили свойство e.IsInputKey = true?
  • Никак не найду ошибку, почему не связывается представление с контроллером при реализации живого поиска?

    @kttotto
    reboot777, мое мнение, что поздно пить боржоми, когда дипломную уже сдавать надо. Книги можно любые, какие Вам зайдут в понималку и они не помогут с дипломной, если Вы не писали что-то руками до этого.
  • Никак не найду ошибку, почему не связывается представление с контроллером при реализации живого поиска?

    @kttotto
    reboot777, Метод принимает параметр term, который нигде не используется. Я подразумаеваю, что это условие поиска, значит должна быть выборка, что-то подобие

    var people = db.people.Where(p =>
        p.family.Contains(term)
    	|| p.name.Contains(term)
    	|| p.patronymic.Contains(term)
    	|| p.date_of_birth.ToString().Contains(term)
    	|| p.telephone.Contains(term)
    	...
    	)
    	.Select(...);


    Строка foreach (var p in people) ничего не делает, нет тела, поэтому и бессмыленна.

    А результат из метода отдается таким образом
    return Json(people, JsonRequestBehavior.AllowGet);

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

    @kttotto
    А код у Вас компилируется? По коду видно, что Вы вообще не в курсе того, что написали. Даже если запрос попадет в контроллер, поиска по условию у Вас нет, строка с foreach бессмысленна, а 'return Json' не возвращает результат.
  • Что должно быть входным параметром метода C#?

    @kttotto
    okalash, ну так тогда это строковый параметр.
  • Что делать,если не успеваем закончить юзер сториз во время?

    @kttotto
    Непредвиденное обстоятельство, это если смерть ключевого разработчика. Все остальное, это ошибка в оценке сложности задачи и незаложенные риски. Так что так и писать, что задача оказалась сложнее по времени, чем думали и по пунктам разложить, на какую фичу сколько времени было потрачено.
  • Asp Net Core не принимает Json?

    @kttotto
    Asp Net Core принимает Json. А как без кода увидеть почему у Вас не работает?
  • Как правильно возвращать объект из async метода в .NET?

    @kttotto
    Петр, Вы все правильно говорите, кроме того, что это указывает только на контекст. Вот Вам пример от сюда
    // GET api/values
    public async Task<IEnumerable<string>> Get()
    {
        //Warning bad code
    
        //Context is present here. So you will get data.
        var httpContext = HttpContext.Current;
        httpContext.Request;
        httpContext.User;
        httpContext.Response;
        httpContext.AllErrors;
        httpContext.Session;
        
        await DoSomethingAsync().ConfigureAwait(false); //Will drop Context here.
        //Context is null here. 
        httpContext = HttpContext.Current;
        return new List<string>();
    }

    После await контекст будет потерян, он не будет восстанавливаться. И это касается не только asp.

    Обратите внимание, что есть стандартное поведение
    When the task resumes, it first enters the captured context before executing the remainder of the code.

    Но это поведение можно отключить и контекст не будет восстанавливаться. Задача await не в том, чтобы указать на восстановление контекста, а в том, чтобы разделить на две части метод и пока выполняется ожидание длительного запроса, нужно вернуть управление потоком, дабы избежать блокировки основного потока. А уж будет потом восстановлен контекст или нет, это уже дело второе.
  • Как правильно возвращать объект из async метода в .NET?

    @kttotto
    Петр, не верно. Если выставить ConfigureAwait(false), то при продолжении поток в контекст заходить не будет, контекст будет потерян, но вызов при этом останется асинхронным. Этот параметр иногда выставляют для оптимизаций асинхронных вызовов в цикле, т.к. восстановление контекста операция затратная.

    Как только встречается await, управление возвращается вызывающему методу, собственно из-за чего блокировка и не происходит. Если говорить о asp, то поток возвращается обратно в пул потоков, когда первая половина выполнится, тогда из пула потоков берется новый поток и вторая половина уже выполняется в нем, с восстановленным контекстом или нет.
  • Как правильно возвращать объект из async метода в .NET?

    @kttotto
    NameOf Var, можно игнорировать, он сам обернет это в задачу, можно конечно и return await Task.FromResult<string>("Success")
  • Как изменить DTO в проекте?

    @kttotto
    Что значит "изменить DTO"?
    ничего не происходит

    А что должно произойти?
    Стоит ли мне накатывать миграцию из-за изменения DTO

    DTO не имеет никакого отношения к entity.

    Я думаю, Вам стоит разобраться, чем все эти модели друг от друга отличаются. Тогда станет понятно куда и какие стоит вносить изменения.
  • Высокоуровневые макросы в C#, есть ли готовые решения?

    @kttotto
    Анатолий Равеский, Вы можете генерировать код прямо в файл, где будет декларативная модель, дописывать в конец, тогда не придется редактировать csproj.
  • Как изолировать выполнение кода несколькими потоками?

    @kttotto
    Владимир, я думаю, Вы неправильно понимаете проблему. Дело не в потоках, а в атомарности метода AddOrder. Если Вы сделаете два запроса на один контроллер, то у Вас будут два разных инстанса контроллера и соответственно разные объекты сервисов. При дебаге Вам может показаться, что заходит в один метод два потока, но каждый поток заходит в метод своего объекта. Соответственно там будут и разные инстансы dbContext.

    Чтобы эта атомарность сохранялась, Вам нужно ограничить доступ на изменение баланса или добавление OrderUnity. Первое, что приходит на ум, это впихнуть нутро AddOrder в транзакцию, с уровнем, который ограничивает изменение данных. Второе, это то, что написал Vladimir S, но я сомневаюсь, что это Вам поможет, т.к. Вы просто не сможете добавить ордер, если кто-то, в промежутке между Вашим чтением баланса и добавлением ордера, уже внес изменения.