powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Идея "перенести логику из SQL кода в C#"
18 сообщений из 43, страница 2 из 2
Идея "перенести логику из SQL кода в C#"
    #39832448
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmВозьмите простейший пример - перевод некоторой суммы со счета А на счет Б. С простейшим бизнес-правилом - "баланс счета не должен быть отрицательным".
Реализуйте данное бизнес-правило полностью на клиенте и сравните с серверной реализацией.Любопытно, каким образом в Тинькофф реализовали мгновенный перевод денег между любыми картами любых банков. Неужели на хранимках.
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832457
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Хранимки тут причем при переводе денег? На чем у них самолеты летают, неужели на чае и сахаре?
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832494
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовХранимки тут причем при переводе денег?
KellyLynchЕсть у меня C# приложение, в котором основная логика сидит в SQL-процедурах (MS SQL Server 2012).
invmВозьмите простейший пример - перевод некоторой суммы со счета А на счет Б.
То есть пример с переводом денег к теме топика не имеет отношения?
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832679
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KellyLynchЕсть у меня C# приложение, в котором основная логика сидит в SQL-процедурах (MS SQL Server 2012). Работа приложения сводится, грубо говоря, к тому, что узнав что надо выполнять некий “Job #5”, оно (C# приложение) вызывает SQL stored proc [Job.5] и ждёт пока та завершится.
Недавно начальство предложило обдумать вопрос:

а хорошо бы нам перенести логику приложения из SQL кода в C# код, а? ” Именно так и сформулировали; не “давайте вынесем бизнес-логику в C#”; а просто “перенести логику приложения из SQL кода в C#”. Ну, будем считать что они просто не очень удачно выразились; и речь шла об именно “давайте вынесем бизнес-логику в C#”. Цели: тестируемость (получить возможность писать unit tests на C#); масштабируемость.

Сейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь? C# приложение написано на Visual Studio 2017.

выражаясь просто - вы хотите усложнить (себе) жизнь. ИМХУЮ: Не стоит потрошить на части то, что должно работать в одном месте - на сервере.
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832708
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

ну не совсем согласен. Если вопрос разовых расходов не стоит, то IMHO, вынос бизнес логики в базу данных только тогда оправдан, когда очень очень критична производительность.
Да и то, тут смотря как делать, многое наоборот в Application Server быстрее работать будет.
А многое на уровне базы данных вообще не корректно держать - я про то, когда сервер базы данных куда-то к внешним сервисам лезет (Big Data - особый случай).

Но это всё о том, как корректно с точки зрения архитектуры и separation of concerns
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832719
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

ХП при переводе денег - всего лишь один из многих компонентов всего процесса. Непонятна попытка поставить процедуры во главу угла.
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832722
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri Abele,

собственно, решение принимается из принципа экономии ресурсов - объёма кода, зарплаты, оборудования и так далее по списку.
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832733
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri AbeleДа и то, тут смотря как делать, многое наоборот в Application Server быстрее работать будет.Конкретный пример есть? При условии, что для проверки БЛ нужны только данные, находящиеся в БД.
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832750
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовYuri Abele,
собственно, решение принимается из принципа экономии ресурсов - объёма кода, зарплаты, оборудования и так далее по списку.
Вы не автор топика, как и я впрочем, поэтому ему решать.
Лично я, если начальство дает денег (а начальство, кстати, не всегда дураки и иногда, удивительно, но требуют правильных вещей), воспользовался бы этим и переделал все под правильную архитектуру с разделением на уровни абстракции, масштабированием и т.д..

invmYuri AbeleДа и то, тут смотря как делать, многое наоборот в Application Server быстрее работать будет.Конкретный пример есть? При условии, что для проверки БЛ нужны только данные, находящиеся в БД.
Ну, во первых, совсем не маловажное ограничение.
А так - какие-то сложные математические вычисления (например custom шифрация), до некоторых пор работа с JSON была проболемой (с 2016 стало совсем хорошо), обработка изображений сохранённых в базе. И т.д..

Есть и задачи, для которых использование DB Engine единственно правильное. Подсчеты статистик по реляционным таблицам, например.

---------------------------

Можно долго дискутировать, но, как-то так получается (блин, чуствую себя динозавром!), с годами, что вот такое разделение всеми воспринимается, как правильное.
Я консалтером работаю, т.е. проекты и клиенты постоянно меняются, и часто бывают миграционные проекты, и всегда речь о разнесениях "что-где" так как выше упоминал. А вот задач обратного порядка уже даже и не помню.
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832767
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri AbeleНу, во первых, совсем не маловажное ограничение.Конечно. Без оного дискутировать бессмысленно.
Yuri AbeleА так - какие-то сложные математические вычисления (например custom шифрация), до некоторых пор работа с JSON была проболемой (с 2016 стало совсем хорошо), обработка изображений сохранённых в базе. И т.д..Перечисленное с очень большой натяжкой можно отнести к бизнес-логике.
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832776
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmПеречисленное с очень большой натяжкой можно отнести к бизнес-логике.
Решающим является не столько что именно делать, сколько то, что с точки зрения корректной архитектуры, и дальнейшего сопровождения, размазывать бизнеслогику по нескольким уровням не правильно.
По факту, ратуют за вынос логики в тот или иной уровень приемущественно те, кто в соответсвующем уровне увереннее себя чуствуют.

Мне к клиенту бежать. Сегодня точно больше дискуссию не поддержу.
Да и вообще, мы IMHO в off-topic скатываемся. Автор не против?
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832785
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri Abele,

а каковы критерии правильности архитектуры? Если не следовать культу карго, то правильность определяется не инструкциями, а минимизацией затрат во всех смыслах. По этой же причине мыльный пузырь сферический, например. Все остальные причины - просто фантазии на тему философского камня.
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832909
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалось раньше сбежать :-)

Превентивный P.S. Я ни в коем случае не ставлю целью рисануться и кого-то куда-то тыркнуть - уже давно этим не болею. По той же причине ("давно") все священные войны считаю безсмысленными - нет плохих продуктов и платформ, но есть плохие решения на их базе.

---------------------

Критерии правильности? Я мог бы порыться в интернете. Там куча статей о том как надо и не надо.
Но вот из моего личного опыта (это как в армии - устав кажется дурацким, но там каждое слово писано кровью :-))
жесткое разделение/абстагирование слоев ( separation of concerns )

KISS и DRY принципы

осознание того, что и так дохрена сложностей накопится, что не надо:
- выбирать "крутые" решения вместо легко сопроваждаемых - яркий пример,
это вечный спор использовать ли графический ETL инструмент или круто написать все скриптами?
- выбирать дорогие решения, потому что они закрывают 120% пожеланий, а остановиться на простых и интуитивных решениях, пусть они процентов 90 закроют

не надо писать custom логику там, где есть готовые, пусть и не идеальные решения. Например:
- да, custom скриптами и хранимыми процедурами можно достичь большей производительности, никто и не спорит, но объектно-ориентированность при этом теряется. И тут лучше взять OR-MAPPER (Entity Framework например)

Типичное решение, которое у немцев считается "правильным":
SPA (Single Page Application), где

FE (Frontend) - Чисто клиентское MVC решение (Angular например)

FE "дёргает" API из BE (Backend)

Сам BE состоит из отдельных проектов/библиотек для
- DAL (Data Access Layer) - в нем, собственно, и сидит бизнеслогика
- DAL через EF (Entity Framework) обращается к DB (Database)
- в DB все таблицы разделены по "бизнес группам" - собственным схемам. Ни в коем случае не использовать dbo схему (мы про MSSQL)
- в DAL все данные описаны POCO моделями 1:1 заMAPленными на таблицы
- с другого конца, на "входе" сидит API (ASP.NET WebAPI например), которы всего лишь мостик между DAL и FE
- обмен данными между FE и API по протоколу REST (проще всего в JSON, но можно и другие форматеры). Можно и SOAP, но это уже не KISS
- c FEом API общается сериализованными ViewModels . Конвертация между Model и ViewModel происходит через специальные MAPперы. Есть готовые, которые деклаларитвно описывают взаимный MAPпинг.
- во FE идеально тоже использовать объектноориентированность и разделение на уровни логики (специально не хотел упоминать MVC, MVVM и т.п.) - Angular идеально подходит.

-----

К чему приводит такой подход, что он позволяет?
- в больших проектах четко разделить работу по отдельным сотрудникам - один DBA, другой DBD, третий UX/UI дизайнер, 4й BE програмист, один архитектор на всех и Agile Coach (наприме SCRUM мастер).
- Project Management это отдельная песня, тоже можно поговорить, но отдельно. Скажу только пару фраз:
1. абсолютный SPOT (Single Point off Truth / Single Source off Truth)
2. жесткое разбиение на SPRINTы
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39832914
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е., к примеру
- класический ASP.NET вообще даже не рассматривается.
- ASP.NET MVC - менее, но всё же тоже не желателен
- какие-то custom JavaScript решения для FE - не желательны (лучше исходники в Type Script и еще лучше декларативный MVC типа Angular, менее желателен Spagetty Code как в React, хотя он и активно с Angular конкурирует)

И т.д. и т.д.. Надеюсь был понят и кому-то помог :-)
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39833894
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл - немцы ещё очень сильно Unit Test-ы любят, в т.ч. и во FrontEnd-е
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39836191
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KellyLynchЕсть у меня C# приложение, в котором основная логика сидит в SQL-процедурах (MS SQL Server 2012).
а хорошо бы нам перенести логику приложения из SQL кода в C# код, а?

Сейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь? C# приложение написано на Visual Studio 2017.
Я меня точно такая же идея, и самое главное - почти полностью реализованная.
Хотя это уже давно придумано, и называется Application Server :)
У меня:
- Приложение написано на Delphi 10.3
- Application Server написанный на C# Visual studio 2017-2019
- База MS SQL 2016
- Куча логики в сторед процедурах, которые я стремлюсь вырезать в логику на Application Server.

Все запросы приходят на Application Server, а тот уже решает, что делать - толи включать логику, толи делать тупо запрос в базу.
Для это у него есть то, что я назвал DataScript. В любом случае, возвращается Объект DataTable.
Если есть DataScript с именем spui_Masterr , то выполняется именно DataScript, иначе, тупо вызывается сторед процедура spui_Masterr

Если всё сделать правильно, то всё будет работать так, как и работало раньше. т.к. ни одного DataScript в системе сначала не будет.
При этом, логика из сторед процедур будет переходить в логику на C# (по мере создания DataScript).
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39836194
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пару скринов.
В программе есть лог запросов, и соответственно источник запроса - либо прямой запрос, либо ДатаСкрипт, либо кэш и другие варианты.
...
Рейтинг: 0 / 0
Идея "перенести логику из SQL кода в C#"
    #39836195
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
18 сообщений из 43, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Идея "перенести логику из SQL кода в C#"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]