All streams
Search
Write a publication
Pull to refresh
1
0

.Net Middle Backend Developer

Send message

Пора бы уже Scala 4.

Почему на Java Based языках все реализации ORM такие убогие

После EF Core выглядит довольно убого

Статья на уровне HelloWorld/

Чтобы это статья была действительно полезной нужно описать как создавать:

контроллеры

эндпоинты (GET\POST хотя бы)

как биндить параметры(примитивы и модели) из Route, Params, Body, Form.

Описать как производится валидация полей.

Следующей статьёй можно было бы описать фреймворк для работы с бд:

Создание доменных моделей

Создание конфигов моделей(Настройка полей, типов, PK, индексов, внешних ключей, отношений)

Чтение из бд включая с динамическими запросами с Where \ GroupBy\ OrderBy.

Как производится включение в запрос связанных сущностей

Создание \ Обновление \ Удаление

Когда понадобятся сложные динамические запросы будет боль и печаль

Проект не особо соответствует чистой архитектуре. Интрефейсы не выделены, сервисы и код связанный с БД в одном проекте.

От чистой архитектуры только пара названий.

Для логов, метрик и готовых аналитических витрин идеально подходит.

Мне нравится для логов - LSM-Tree + TLL + PARTITION BY toYYYYMM(DATE).

Я про Scala => Java => Oracle

А библиотек - контейнеров DI нет?

На данный момент 5 вакансий по всей России

Потому что Microsoft это фуфуфу, а Oracle православный

Scala - сложнее.

Сложный код на Scala 1.5-2 раза больше.

Scala расходует больше памяти изза Immutable Scala Way.

Коллекции в Scala имеют более высокую алгоритмическую сложность изза иммутабельности.

Scala - легаси, большинство проектов так и остались на Scala 2.

Scala - убогая экосистема и зоопарк библиотек на коленке.

Начиная с 24.3 версии там новое лицензирование, которое требует ключ для кластера.

ULID не корректно сортируется на MS SQL SERVER.
ULID предполагает сортировку слева на право (левая сторона дата)
Если вы создатите таблицу с uniqueidentifier и DateTime, а затем вставите в нее данные в хронологическом порядке (ULID и дата созданные в одно время)
То вы увидите что даты идут в случайном порядке.
Также мои тесты с бенчмарком показали что время вставки имеет большой разброс от 2 до 22 секунд на вставку 100_000 строк.
Если вы будете конвертировать ваш ULID в string => nvarchar(26) то он будет сортироватся корректно.

ULID не корректно сортируется на MS SQL SERVER.
ULID предполагает сортировку слева на право (левая сторона дата)
Если вы создатите таблицу с uniqueidentifier и DateTime, а затем вставите в нее данные в хронологическом порядке (ULID и дата созданные в одно время)
То вы увидите что даты идут в случайном порядке.
Также мои тесты с бенчмарком показали что время вставки имеет большой разброс от 2 до 22 секунд на вставку 100_000 строк.
Если вы будете конвертировать ваш ULID в string => nvarchar(26) то он будет сортироватся корректно.

ULID не корректно сортируется на MS SQL SERVER.
ULID предполагает сортировку слева на право (левая сторона дата)
Если вы создатите таблицу с uniqueidentifier и DateTime, а затем вставите в нее данные в хронологическом порядке (ULID и дата созданные в одно время)
То вы увидите что даты идут в случайном порядке.
Также мои тесты с бенчмарком показали что время вставки имеет большой разброс от 2 до 22 секунд на вставку 100_000 строк.
Если вы будете конвертировать ваш ULID в string => nvarchar(26) то он будет сортироватся корректно.

Обычно все примеры на ORM фреймворках - уровня детского сада)))

А как там делается ветвление - опциональные фильтры, сортировка по выбору пользователя, группировка по выбору?

Как там добавить конструкции вида

foreach(paramFilter in paramFilters)

{

productsQuery = productsQuery

.Where(product => product .Params

.Any(param => param.ParamId == paramFilter.ParamId &&

paramFilter.Values.Contains(param.Value)));

}

Который транслируется в список

AND EXISTS(select 1

from ProductParamValues

where ProductId = ... AND ParamId = ... AND VALUE IN (...))

Но я думаю ты согласишься что ты даже не зная что это за язык и фреймворк, понял каждую строчку.

меня смущает то что на скале это всё делается намного сложнее и преимуществ в этой сложности я не вижу

Есть ли на скале фреймворк который может строить запросы в бд таким образом:

Например Include(x => x.SomeProperty) это Join

Остальное думаю и так понятно.

Вся логика будет выполнена на стороне БД

1

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

Backend Developer, Database Developer
Senior
From 250,000 ₽
C#
.NET
ASP.Net
ASP.NET MVC
MSSQL
Entity Framework
SQL
Database
Git
Docker