Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Идея "перенести логику из SQL кода в C#"  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26788
invm
Возьмите простейший пример - перевод некоторой суммы со счета А на счет Б. С простейшим бизнес-правилом - "баланс счета не должен быть отрицательным".
Реализуйте данное бизнес-правило полностью на клиенте и сравните с серверной реализацией.
Любопытно, каким образом в Тинькофф реализовали мгновенный перевод денег между любыми картами любых банков. Неужели на хранимках.
1 июл 19, 18:39    [21918452]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6936
skyANA,

Хранимки тут причем при переводе денег? На чем у них самолеты летают, неужели на чае и сахаре?
1 июл 19, 18:57    [21918465]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2501
Владислав Колосов
Хранимки тут причем при переводе денег?

KellyLynch
Есть у меня C# приложение, в котором основная логика сидит в SQL-процедурах (MS SQL Server 2012).

invm
Возьмите простейший пример - перевод некоторой суммы со счета А на счет Б.

То есть пример с переводом денег к теме топика не имеет отношения?
1 июл 19, 20:45    [21918518]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3147
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.


выражаясь просто - вы хотите усложнить (себе) жизнь. ИМХУЮ: Не стоит потрошить на части то, что должно работать в одном месте - на сервере.
2 июл 19, 12:04    [21918880]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1651
Ролг Хупин,

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

Но это всё о том, как корректно с точки зрения архитектуры и separation of concerns
2 июл 19, 12:48    [21918918]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6936
Дмитрий Мух,

ХП при переводе денег - всего лишь один из многих компонентов всего процесса. Непонятна попытка поставить процедуры во главу угла.
2 июл 19, 13:10    [21918944]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6936
Yuri Abele,

собственно, решение принимается из принципа экономии ресурсов - объёма кода, зарплаты, оборудования и так далее по списку.
2 июл 19, 13:13    [21918947]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
invm
Member

Откуда: Москва
Сообщений: 8838
Yuri Abele
Да и то, тут смотря как делать, многое наоборот в Application Server быстрее работать будет.
Конкретный пример есть? При условии, что для проверки БЛ нужны только данные, находящиеся в БД.
2 июл 19, 13:19    [21918965]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1651
Владислав Колосов
Yuri Abele,
собственно, решение принимается из принципа экономии ресурсов - объёма кода, зарплаты, оборудования и так далее по списку.

Вы не автор топика, как и я впрочем, поэтому ему решать.
Лично я, если начальство дает денег (а начальство, кстати, не всегда дураки и иногда, удивительно, но требуют правильных вещей), воспользовался бы этим и переделал все под правильную архитектуру с разделением на уровни абстракции, масштабированием и т.д..

invm
Yuri Abele
Да и то, тут смотря как делать, многое наоборот в Application Server быстрее работать будет.
Конкретный пример есть? При условии, что для проверки БЛ нужны только данные, находящиеся в БД.

Ну, во первых, совсем не маловажное ограничение.
А так - какие-то сложные математические вычисления (например custom шифрация), до некоторых пор работа с JSON была проболемой (с 2016 стало совсем хорошо), обработка изображений сохранённых в базе. И т.д..

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

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

Можно долго дискутировать, но, как-то так получается (блин, чуствую себя динозавром!), с годами, что вот такое разделение всеми воспринимается, как правильное.
Я консалтером работаю, т.е. проекты и клиенты постоянно меняются, и часто бывают миграционные проекты, и всегда речь о разнесениях "что-где" так как выше упоминал. А вот задач обратного порядка уже даже и не помню.
2 июл 19, 13:51    [21919007]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
invm
Member

Откуда: Москва
Сообщений: 8838
Yuri Abele
Ну, во первых, совсем не маловажное ограничение.
Конечно. Без оного дискутировать бессмысленно.
Yuri Abele
А так - какие-то сложные математические вычисления (например custom шифрация), до некоторых пор работа с JSON была проболемой (с 2016 стало совсем хорошо), обработка изображений сохранённых в базе. И т.д..
Перечисленное с очень большой натяжкой можно отнести к бизнес-логике.
2 июл 19, 14:16    [21919037]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1651
invm
Перечисленное с очень большой натяжкой можно отнести к бизнес-логике.

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

Мне к клиенту бежать. Сегодня точно больше дискуссию не поддержу.
Да и вообще, мы IMHO в off-topic скатываемся. Автор не против?
2 июл 19, 14:33    [21919053]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6936
Yuri Abele,

а каковы критерии правильности архитектуры? Если не следовать культу карго, то правильность определяется не инструкциями, а минимизацией затрат во всех смыслах. По этой же причине мыльный пузырь сферический, например. Все остальные причины - просто фантазии на тему философского камня.
2 июл 19, 14:41    [21919069]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1651
Удалось раньше сбежать :-)

Превентивный 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ы
  • 2 июл 19, 17:13    [21919269]     Ответить | Цитировать Сообщить модератору
     Re: Идея "перенести логику из SQL кода в C#"  [new]
    Yuri Abele
    Member

    Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
    Сообщений: 1651
    Т.е., к примеру
    - класический ASP.NET вообще даже не рассматривается.
    - ASP.NET MVC - менее, но всё же тоже не желателен
    - какие-то custom JavaScript решения для FE - не желательны (лучше исходники в Type Script и еще лучше декларативный MVC типа Angular, менее желателен Spagetty Code как в React, хотя он и активно с Angular конкурирует)

    И т.д. и т.д.. Надеюсь был понят и кому-то помог :-)
    2 июл 19, 17:20    [21919280]     Ответить | Цитировать Сообщить модератору
     Re: Идея "перенести логику из SQL кода в C#"  [new]
    Yuri Abele
    Member

    Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
    Сообщений: 1651
    Забыл - немцы ещё очень сильно Unit Test-ы любят, в т.ч. и во FrontEnd-е
    4 июл 19, 15:55    [21920863]     Ответить | Цитировать Сообщить модератору
     Re: Идея "перенести логику из SQL кода в C#"  [new]
    Valery_B
    Member

    Откуда: Москва
    Сообщений: 1987
    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).
    11 июл 19, 09:54    [21924572]     Ответить | Цитировать Сообщить модератору
     Re: Идея "перенести логику из SQL кода в C#"  [new]
    Valery_B
    Member

    Откуда: Москва
    Сообщений: 1987
    Пару скринов.
    В программе есть лог запросов, и соответственно источник запроса - либо прямой запрос, либо ДатаСкрипт, либо кэш и другие варианты.

    К сообщению приложен файл. Размер - 59Kb
    11 июл 19, 10:09    [21924584]     Ответить | Цитировать Сообщить модератору
     Re: Идея "перенести логику из SQL кода в C#"  [new]
    Valery_B
    Member

    Откуда: Москва
    Сообщений: 1987


    К сообщению приложен файл. Размер - 31Kb
    11 июл 19, 10:10    [21924586]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
    Все форумы / Microsoft SQL Server Ответить