Shub
с рекордами тема в том, что тип выводится по типам членов, а не по названиям
Shub
простите, гоню
Shub
щас попробую пример накидать
Shub
не успею.
Shub
короче, имя типа рекорда в сам тип не входит. поэтому если есть два разных типа, но с одинаковыми полями одинаковых типов - окамл всегда выбирает наиболее близкий по объявлению
Shub
я кстати не проверял, как в f#
Vasily
В f# по первому совпадению имени поля
Vasily
Я ток сегодня себе ногу чуть не отстрелил
Shub
Маер вообще откровенно вредный экземпляр
Hog
Shub
В чужом глазу...
такое впечатление, что вы пытаетесь что-то сказать. и еще впечатление, что у вас никак не получается.
Shub
Мейер заспамил своим Rx все, что только возможно.
Shub
он отметился в жаваскрипте, в жаве и даже в скале
Shub
при этом люди, которые с ним общались лично, говорят, что он производит весьма странное впечатление. может он внутри крайне умен, но снаружи он это никак не проявляет. в смысле. что он снаружи вообще ничего не проявляет
x
http://newsroom.fb.com/news/2019/03/keeping-passwords-secure/
x
we found that some user passwords were being stored in a readable format within our internal data storage systems.
x
Это дно?
x
Хранить пароли текстом.. я не знаю что дальше.
Vasiliy
https://www.youtube.com/watch?v=SYvWfDxhm_s
Vasiliy
Nikolay
А для VS нет такой настройки/extension, чтобы как в райдере автоматически добавлять using?
Dr. Friedrich
Nikolay
Тмаhttps://marketplace.visualstudio.com/items?itemName=Fudge.auto-using
Nikolay
Типа такого
Dr. Friedrich
Ну или там по Ctrl-. чото делалось
Nikolay
Я чутка про другое
Nikolay
Вот например, в райдере пишешь DirectoryInf, и он сразу предлагает его импортировать из другой сборки
Nikolay
А в VS нужно Alrt+Enter Нажать, и только потом он предложит
Dr. Friedrich
А так тебе ещё и референс подставлять? Кокой ты!
Nikolay
Т.е., нужно всё же полностью название класса написать, тогда студия предложет импортировать
Nikolay
А в райдере не обязательно, и это очень удобно)
Nikolay
Даже в VSCode есть плагин такой
Aleksandr
Только им и пользуюсь
Aleksandr
Но там селекты чейнить нельзя
Aleksandr
Это жаль
Vasiliy
народ, есть csv файл. и там числа float разделены запятой, а не точкой, можно об этом как то сказать TP ? а то вместо 100 рублей за кофе я вижу все 10000 рублей за кофе.
Ayrat
Viacheslav
Nikolay
Сейчас наверняка всё гораздо лучше, но несколько лет назад он у меня студию намертво вешал постоянно
Nikolay
Осадочек так сказать остался
Viacheslav
Там можно его настроить, чтобы было только то, что тебе от него нужно
Vasiliy
Nikolay
Ну вот, поэтому я и пользуюсь райдером, если возможно
Nikolay
У райдера такой проблемы нет, хотя иногда он конечно проекты не загружает
Vasiliy
10, ок. это большой для меня проект уже
Nikolay
Так там скорее от количества файлов зависит
Nikolay
У меня вот проект 1876 .cs файлов и 290 .cshtml
Viacheslav
Nikolay
Dr. Friedrich
Да.
Nikolay
В своп выгружать, например
Nikolay
А поясните за организацию кода.
Вот щас начал пилить мини проект, хочется понять всё же как грамотно сделать.
Вот есть такой код, это по сути метод контроллера:
public async Task<GraphDealer> UpdateDealer(
IResolverContext resolverContext,
[Service] AlerterContext alerterContext,
DealerInput dealer)
{
if (!dealer.Id.HasValue)
{
throw ErrorUtils.ArgumentError(
resolverContext,
"Dealer identifier should be set.",
nameof(dealer));
}
var dbDealer = alerterContext
.Dealers
.Include(x => x.DealerTags)
.Include(x => x.DealerEmails)
.FirstOrDefault(x => x.DealerId == dealer.Id.Value);
if (dbDealer == null)
{
throw ErrorUtils.ArgumentError(
resolverContext,
"Dealer with specified identifier was not found.",
nameof(dealer));
}
dbDealer.Name = dealer.Name;
if (dealer.Emails == null)
{
dealer.Emails = new List<string>();
}
if (dealer.Tags == null)
{
dealer.Tags = new List<int>();
}
var removedEmails = dbDealer.DealerEmails
.Where(x => !dealer.Emails.Contains(x.Email));
foreach (var email in removedEmails)
{
email.IsDeleted = true;
}
var removedTags = dbDealer.DealerTags
.Where(x => !dealer.Tags.Contains(x.TagId))
.ToList();
foreach (var tag in removedTags)
{
dbDealer.DealerTags.Remove(tag);
}
foreach (var email in dealer.Emails.Where(x =>
dbDealer.DealerEmails.All(e => e.Email != x)))
{
dbDealer.DealerEmails.Add(new DealerEmail
{
DealerId = dbDealer.DealerId,
Email = email
});
}
foreach (var tagId in dealer.Tags.Where(x =>
dbDealer.DealerTags.All(e => e.TagId != x)))
{
dbDealer.DealerTags.Add(new DealerTag
{
DealerId = dbDealer.DealerId,
TagId = tagId
});
}
await alerterContext.SaveChangesAsync();
return new GraphDealer
{
Id = dealer.Id.Value,
Name = dealer.Name
};
}
И в методе контроллера у меня по сути бизнес-логика, а это не очень хорошо.
Куда это лучше вынести?
x
в статический метод класса BlaBlaCoreDomainLogic
Nikolay
x
он будет принимать на вход обьекты домены и выплёвывать их же
Nikolay
Вообще, я на работе использую паттерн Service, но хз правильно ли это, или нет
x
Фаулеровский сервис?
x
https://martinfowler.com/eaaCatalog/serviceLayer.html
x
но мне больше такое нравится https://blog.ploeh.dk/2016/03/18/functional-architecture-is-ports-and-adapters/
Vladislav
https://www.reddit.com/r/programming/comments/b3sab6/facebook_stored_hundreds_of_millions_of_user/
Vladislav
уЧиТе АлГоРиТмЫ
Vasiliy
Vasiliy
надо попробовать запилить что нибудь через CQRS, ибо если правильно понял, что там можно строить цепочки вызовов и что надо сделать.
Aleksandr
x
Aleksandr
А что не так?
Nikolay
Nikolay
Вот ещё интересный паттерн
Aleksandr
Костыль
Зато так ты полностью контроллируешь свои тесты
Aleksandr
И если вылетает ошибка, то ты точно знаешь, что ошибка в тестируемом методе (или в самом тесте), но не в зависимостях
Vasiliy
x
А что не так?
What does composition have to do with mocking?
Everything. The essence of all software development is the process of breaking a large problem down into smaller, independent pieces (decomposition) and composing the solutions together to form an application that solves the large problem (composition).
Mocking is required when our decomposition strategy has failed.
Mocking is required when the units used to break the large problem down into smaller parts depend on each other. Put another way, mocking is required when our supposed atomic units of composition are not really atomic, and our decomposition strategy has failed to decompose the larger problem into smaller, independent problems.