• Как лучше хранить денежные суммы в Postgres?

    @foterio
    Несколько лет назад, я потратил неделю чтобы гарантировано разобраться и принять правильное решение как хранить деньги в Postrgres.
    3 вариант оказался единственно верным. Хранить деньги нужно в копейках, центах в виде int. Операции сложения вычитания так же необходимо проводить в копейках, центах. И только при выводе денег для конечного пользователя вы приводите его в читабельный вид $10.99
    Ответ написан
    2 комментария
  • Только у меня проблема с установкой Visual Studio 2022?

    zerxx
    @zerxx
    В ноябре 2022 работало только через VPN. На середину декабря - заработало в нормальном режиме, без VPN. Visual Studio обновляется без проблем
    Ответ написан
    Комментировать
  • Как хранить информацию в БД о поставщиках когда они могут являться разынми сущностями?

    Vindicar
    @Vindicar
    RTFM!
    Это, по сути, наследование. Абстрактный класс-предок (поставщик) и конкретные классы-потомки (физлицо, ИП, организация). Наследование обычно выражается в структуре БД так: создаётся таблица "Поставщик", содержащая общие для всех классов поля и имеющая свой ключ.
    Затем под каждый класс-потомок создаётся отдельная таблица, содержащая сведения, уникальные для этого класса. В этой таблице первичный ключ одновременно является внешним ключом, ссылающимся на таблицу "Поставщик". Иными словами, в таблице-потомке могут быть только записи с ключами, которые есть в таблице "Поставщик", а для каждой записи в "Поставщик" будет не более одной записи в таблице-потомке.

    В таблице "Поставщик" также может быть поле, указывающее на конкретный тип поставщика (физлицо, ИП, организация), т.е. в какой таблице искать остальные данные. Наличие или отсутствие этого поля - вопрос вкуса. В принципе, если нам нужны сведения о конкретном типе поставщика, мы можем попытаться сделать INNER JOIN с нужной конкретной таблицей. Это отсеет все записи других типов.
    Такой подход (без поля типа) позволяет избежать противоречий, когда запись находится в одной таблице-потомке, а поле указывает на другую. Но с другой стороны, если мы не знаем, какой конкретный тип у данного поставщика, нам придётся либо перебирать таблицы-потомки в рамках нескольких запросов к БД, либо делать LEFT JOIN со всеми таблицами-потомками, и смотреть, какие поля не будут NULL.

    Слабая сторона такой схемы в том, что связь по внешнему ключу не запрещает существование записей в нескольких таблицах-потомках, ссылающихся на одну и ту же запись в "Поставщике". Это придётся контролировать отдельно, триггерами или хранимыми процедурами.
    Ответ написан
    4 комментария
  • Как лучше хранить денежные суммы в Postgres?

    @tukreb
    Вот так не нужно
    https://wiki.postgresql.org/wiki/Don%27t_Do_This#D...

    И всё Postresql умеет в numeric https://www.postgresql.org/docs/current/datatype-n...
    up to 131072 digits before the decimal point; up to 16383 digits after the decimal point
    Ответ написан
    Комментировать
  • Как лучше хранить денежные суммы в Postgres?

    @rPman
    Главный бонус использования 3 варианта - не будет важна поддержка (т.е. ее отсутствие) чисел с переменной фиксированной точностью на бакэнде. Например в php любой драйвер преобразует числа в double со всеми вытекающими от сюда проблемами.

    Недостаток - можно будет попасть на лимиты стандартных целых чисел (для 64-битных систем, например php), например если на tron ты попробуешь так реализовать работу с токеном usdd, то ты обнаружишь что его точность абсурдна - 18 знаков после запятой, и придется использовать соответствующие классы для работы с ним. Если не преобразовать в запросе тип поля в строку, тот же php pdo преобразует слишком большие целые числа в double

    p.s. bitcoin lightning network добавили пару значимых знаков, советую об этом тоже подумать
    Ответ написан
    2 комментария
  • Имеет ли смысл использовать паттерн MVVM в приложении Winforms?

    igolets
    @igolets
    Программист C#, MSSQL
    1. WPF немного адаптирован для MVVM, но это не обязательно — масса примеров в родной документации не использует никакого MVVM. Так что я бы не связывал выбор использования MVVM с WPF.
    2. Есть готовые библиотеки для WinForms, которые умеют делать легкий MVVM. Лично я, например, работал с DevExpress и на мой взгляд, из коробки он дает даже больше, чем WPF (например, есть встроенные сервисы работы с попап окнами). Так что использовать MVVM на WinForms не сложнее, чем на WPF.
    3. И раз мы отделили вопрос MVVM от WPF/WF, нужно принципиально решать вопрос использовать ли MVVM в конкретном проекте.
    4. И, собственно, вопрос использование MVVM имеет плюсы и минусы. Плюсы — сопротивление хаосу при массированных изменениях кода, уменьшение человеческого труда при тестировании. Минусы — больше кодинга (накладные расходы на раздельную реализацию VM + юнит-тесты), не устраняет ручное тестирование до конца. Использовать MVVM без юнит-тестов смысла особо не вижу — кодить больше, выгоды никакой.


    Лично мое мнение — если нужна простая утилита «для себя», которую один раз написали и не трогают, я бы писал быстро (без MVVM и тестов). А если её будут менять, в том числе другие разработчики, а цена ошибки — деньги (например, если админятся данные клиентов по контрактам), то лучше MVVM и тесты.
    Ответ написан
    Комментировать
  • Имеет ли смысл использовать паттерн MVVM в приложении Winforms?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    А что сразу не делать проект на WPF? Тем более он затачивался под MVVM. MVVM в WinForms можно, но немного с костылями.
    Ответ написан
    Комментировать
  • Почему не запускается Data Pump Import (команда impdp)?

    Lorien_Elf
    @Lorien_Elf
    Keep calm and drop database
    Подключение с именем pdb1 не описано в файле tnsnames.ora на хосте, на котором запускаете impdp. Добавьте в этот файл описание подключения.
    Ответ написан
    7 комментариев
  • Имеет ли смысл использовать паттерн MVVM в приложении Winforms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Нет, оно там просто не нужно - достаточно просто правильно структурировать приложение. В WF вполне достаточно просто разделить логику приложения и логику самого интерфейса. Нужен нестандартный контрол со своим поведением? Отпочковываем класс от Control и вперед. Логика самого интерфейса вполне нормально живет в самих классах элементов управления (в терминах MVVM это два в одном View + ViewModel). Например, реальный случай из практики: запилил WF приложение по выданному дизайну - его потестили и почти сразу дизайнер нарисовал полностью новый дизайн; ввиду увеличения фишечек, рюшечек и всего остального (а так же тормозов древнего легаси наследия WF, конечно же) - я просто перенес файлы с логикой из WF проекта в WPF проект в модели и запилил новый GUI на WPF.
    Ответ написан
    Комментировать
  • Где взглянуть на C# проект с "эталонной" архитектурой?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    В общем, условно, такой код, глядя на который, даже самые суровые критики не могли бы найти к чему придраться.

    Всегда можно к чему-то придраться.
    Качество архитектуры можно понять только в динамике - легко ли вносить изменения в продукт, или сложно.
    А так есть eShopOnWeb и eShopOnContainers
    Ответ написан
    Комментировать
  • Кто-нибудь уже писал мобильные приложения на Maui? Как впечатления?

    tentrun
    @tentrun
    Clown c# inside
    Насколько я знаю это просто развитие Xamarin.
    По сравнению с Xamarin улучшена производительность и появилось поддержка Model-View-Update и razor pages.
    Так же сразу идет билд под все платформы и что-то там с нативным апи они сделали.
    Насчет RN и Flutter составить конкуренцию в плане функциональности спокойно может, в плане скорости разработки при должных навыках в принципе тоже может, но надо не забывать что имеются баги и маленькое комьюнити.
    Ответ написан
    Комментировать
  • Как упросить это if...else выражение?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вообще тут напрашивается перегрузка для каждого T:
    public void SetStrategy(Action<SomeOne> action) {
      _someOne = action;
    }
    
    public void SetStrategy(Action<SomeTwo> action) {
      _someTwo = action;
    }

    Но можно и так, если прям необходимо один метод (стоит задуматься, а действительно ли необходимо):
    switch(executor) {
      case Action<SomeOne> one:
        _someOne = one;
        break;
      case Action<SomeTwo> two:
        _someTwo = b;
        break;
      default:
        throw new NotSupportedException($"{typeof(T).FullName} is not supprted");
    }
    Ответ написан
    Комментировать
  • Как упросить это if...else выражение?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Перегрузка - самый оптимальный вариант.
    Ответ написан
    1 комментарий
  • Как правильно обновить WPF-проект до .NET7?

    vabka
    @vabka
    Токсичный шарпист
    Проверь ещё breaking changes
    https://learn.microsoft.com/en-us/dotnet/core/comp...
    Ответ написан
    Комментировать
  • Как правильно подключить DLL-библиотеку к WPF-проекту?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист

    чтобы при публикации она попадала в exe-контейнер?

    Положи её в папку с проектом.
    Поставь файлу свойство, что его надо при сборке копировать.
    Поставь в проекте свойство IncludeNativeLibrariesForSelfExtract
    Ответ написан
    2 комментария
  • Где взять техзадание для ASP.NET сервиса?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Реализуй вот это
    Задача
    Доработка сканера серийных номеров с этикеток.
    Цель: доработать существующий сканер этикеток.
    1. Система должна давать возможность нахождения и распознавания серийного номера независимо от иного текста, цвета фона, кол-ва символов S/N.
    2.Скорость - не менее 1,5 сек на объект
    3.Точность распознавания - не менее 96%
    4. Динамический выбор области сканирования с помощью татч-скрина
    5. Системные требования IOS, Android.

    Это конечно перебор для вас в области 4,5
    Но просто сделай на основе фото.
    Как заготовку сможешь использовать это, баркоды пакеты
    ZXing.Net
    ZXing.Net.Bindings.CoreCompat.System.Drawing

    Серийный номер Tesseract

    https://github.com/vkorotenko/VueRecaptcha
    Ответ написан
    2 комментария
  • Не получается создать Docker image через docker-compose c кодом на GO?

    @micronull
    Вы пытаетесь запустить через `go run`.
    Эта команда компилирует приложение во временную директорию и от туда его запускает.
    В итоге контейнер после успешной компиляции завершает своё выполнение и ни как не реагирует на запуск временного файла.

    Вы можете через multi-stage builds предварительно скомпилировать приложение и переместить полученный файл в новый image.
    И уже там прописывать ENTRYPOINT на полученный бинарный файл.
    Ответ написан
    5 комментариев
  • Правильно ли объединять WPF и WinForms проекты в одно решение (solution)?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Смотрите
    6321bd1d3f337135304274.png

    Вот например солюшен
    В нем общие модельки между апи и мобильным приложением.
    тут и netstandart2.1 net6 и nodejs

    Все собирается из одного места, и переиспользуются модели в куче мест
    Ответ написан
    1 комментарий
  • Я что-то не так понимаю в декларации типа Event для DOM?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Интерфейс не содержит нужных полей, нужно указать тип примерно так
    (event.target as EventTarget). tagName
    Ответ написан
    Комментировать