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

Откуда:
Сообщений: 84
Есть у меня 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.
20 июн 19, 12:08    [21912119]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4005
KellyLynch
давайте вынесем бизнес-логику в C#”. Цели: тестируемость (получить возможность писать unit tests на C#); масштабируемость.

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


Ваше начальство собирается Unit-тестами тестировать бизнес-логику?
20 июн 19, 12:39    [21912141]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4463
KellyLynch, пока напоминает старый анекдот про отличника и ангела-хранителя...
20 июн 19, 12:43    [21912150]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
vikkiv
Member

Откуда: London
Сообщений: 2498
KellyLynch,

в чём загвоздка? нет преград для процесса написанном на C#
(или другом языке) подключится к серверу (под нужным user)
и запустить процедуру (или любую другую SQL операцию/скрипт),
дождаться окончания (в пределах настроек соединения)
и получить ответ.
20 июн 19, 13:00    [21912169]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
invm
Member

Откуда: Москва
Сообщений: 8838
KellyLynch
Сейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь?
Для начала должны помочь размышления на тему "А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?"
20 июн 19, 13:07    [21912174]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
msLex
Member

Откуда:
Сообщений: 6953
invm
KellyLynch
Сейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь?
Для начала должны помочь размышления на тему "А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?"


Почему клиент? Скорее а appserver.
20 июн 19, 13:10    [21912184]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
KellyLynch
Member

Откуда:
Сообщений: 84
msLex
invm
пропущено...
Для начала должны помочь размышления на тему "А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?"


Почему клиент? Скорее а appserver.


Да - в реальности это appserver. Но всё равно - меня одолевают те же сомнения. Я вот и создал этот пост чтобы узнать как "за" так и "против" такого решения.
20 июн 19, 13:20    [21912193]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
invm
Member

Откуда: Москва
Сообщений: 8838
msLex
Почему клиент? Скорее а appserver.
Какая разница? Перечень возможных проблем от этого не изменится.
20 июн 19, 13:23    [21912196]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
KellyLynch
Member

Откуда:
Сообщений: 84
SQL2008
KellyLynch
давайте вынесем бизнес-логику в C#”. Цели: тестируемость (получить возможность писать unit tests на C#); масштабируемость.

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


Ваше начальство собирается Unit-тестами тестировать бизнес-логику?


Да.
20 июн 19, 13:23    [21912198]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
invm
Member

Откуда: Москва
Сообщений: 8838
KellyLynch
Я вот и создал этот пост чтобы узнать как "за" так и "против" такого решения.
Возьмите простейший пример - перевод некоторой суммы со счета А на счет Б. С простейшим бизнес-правилом - "баланс счета не должен быть отрицательным".
Реализуйте данное бизнес-правило полностью на клиенте и сравните с серверной реализацией.
20 июн 19, 13:40    [21912208]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
KellyLynch
Member

Откуда:
Сообщений: 84
invm
KellyLynch
Сейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь?
Для начала должны помочь размышления на тему "А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?"


Вот и у меня кстати т же сомнения. Просто мне кажется что "там наверху" надеются на то что Entity Framework это каким-то образом сам решит. Я Entity Framework пока не работал, поэтому ещё не знаю - что он может и чего не может.
Буду признателен, если сможете привести некую ситуацию, где опровергается надежда на то что "Entity Framework это каким-то образом сам решит".
20 июн 19, 13:41    [21912211]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
vikkiv
Member

Откуда: London
Сообщений: 2498
KellyLynch,

вроде ведь и так по определению:
логика приложения наверняка и так в приложении,
логика сервиса (appserver) - на сервисе,
логика SQL - в SQL (процедурах)

(хотя не всегда получается изолировать и разнести по шагам из-за длинной цепи зависимостей)

пока не будет понятия о том что именно и куда выносить - разговор ни о чём.

пример 1 (больше бизнес):
не кучу параметров к вызываемой процедуре которая на основании этих параметров решает
какую (sub) процедуру вызывать
а сразу вызов нужной процедуры с меньшим количеством параметров.

пример 2 (как выше указали: целостность):
begin tran ... commit/rollback, там-же логика резерваций ID, локи и пр.

первый пример - реализуем, второй - рассыпание граблей.

в результате тесты скорее всего только покажут что лучше это делать на SQL proc
(т.е. ничего нового, что было известно заранее, много активности, негативная продуктивность)

так что пускай покрывают тестами вводные параметры процедур и ловят сбои на них,
и потом в зависимости от результатов (если обоснованно,
а не допустим не тот тип данных подали, или не правильное имя колонны получили)
уже будет копаться SQL код.

KellyLynch
Цели: тестируемость (получить возможность писать unit tests на C#); масштабируемость.

в чём проблема с тестируемостью из C# сейчас?
есть ограничения по масштабируемости?
C# приложение не может вызвать оду и туже процедуру несколько раз параллельно?
KellyLynch
Сейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь?
PowerShell тот-же .NET / C# , без проблем и для стресс тестирования, и для логического
многие автоматизированные тесты с ним напрямую и работают

KellyLynch
C# приложение написано на Visual Studio 2017.
приложение написано на C# , разработано в VS
20 июн 19, 14:20    [21912246]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
MaratIsk
Member

Откуда: Astana, Kazakhstan
Сообщений: 2476
KellyLynch,
бьюсь об заклад - это твоя личная бредовая идея :) угадал?
20 июн 19, 16:14    [21912340]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Lepsik
Member

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


----Цели: тестируемость (получить возможность писать unit tests на C#); масштабируемость.

Кто же вам мешает писать униттесты на TSQL? У меня их мегабайты.
А масштабируемость на базе уже во флаконе.

Просто найдите толкового db девелопера.
20 июн 19, 16:24    [21912353]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Сон Веры Павловны
Member

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

Почитайте вот это, и дайте почитать начальству. Подумайте.
Несмотря на то, что статье 15 лет, актуальности она не потеряла. И автор в своем мнении не одинок.
20 июн 19, 17:07    [21912382]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
vikkiv
Member

Откуда: London
Сообщений: 2498
Lepsik,

для модульного тестирование может быть достаточно,
но у SQL сильная зависимость от последовательности шагов (в самом скрипте),
т.е. большие ограничения на многократный вызов параллельно (хотя и возможно - но изврат)

внешний процесс может вызывать те-же скрипты (инструментарием того-же SQL) широким фронтом
разных сессий одновременно, т.е. параллельная мультизадачность в workflow
(и речь вовсе не о multithreading, т.к. это немного другая тема со своими возможностями на обоих endpoint)
20 июн 19, 17:07    [21912383]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
StarikNavy
Member

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

споры где должна быть логика не утихают 20 лет
однозначного ответа нету (есть + и - у каждого вариант)
поэтому логика "я тут прочитал статью, а давайте как все перенесем" чревата последствиями ("работает - не трожь!")

с другой стороны , если начальство готово выбрасывать деньги на ветер - почему бы и нет? без зп не останетесь
20 июн 19, 18:14    [21912429]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
msLex
Member

Откуда:
Сообщений: 6953
StarikNavy
KellyLynch,

споры где должна быть логика не утихают 20 лет
однозначного ответа нету (есть + и - у каждого вариант)
поэтому логика "я тут прочитал статью, а давайте как все перенесем" чревата последствиями ("работает - не трожь!")

с другой стороны , если начальство готово выбрасывать деньги на ветер - почему бы и нет? без зп не останетесь


Вопрос - почему начальство вдруг заговорило об этом?
Может есть какие-то проблемы?
20 июн 19, 18:36    [21912445]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
a_voronin
Member

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

По данному вопросу надо выполнить ритуал НАХУА

Картинка с другого сайта.
20 июн 19, 18:40    [21912447]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4240
vikkiv
Lepsik,

для модульного тестирование может быть достаточно,


И я и автор пишут про Unit тестинг. TSQL сильно уступает C# из за отсутствия ООП, но в целом позволяет это делать вполне эффетктивно.

То о чем вы пишите это совсем другое, фунциональное и нагрузочное тестирование.
20 июн 19, 20:10    [21912484]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
stenford
Member

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

зависит от типа приложения, чем больше оно датаориентированное - тем меньше смысл выноса в третье звено. Если это типичная прикладуха - то скорее имеет смысл чем нет, т.к. там много логики.
Другой вопрос если система уже есть и работает то переписывание не даст бизнес выгоды, обычно такой рефакторинг имеет смысл при значительной перестройке приложения (например из винформс на веб), иначе смысла трогать нет
Из фрейморков обычная VS, пишешь апп сервер c WEB API например
21 июн 19, 03:18    [21912562]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
shalomb
Member

Откуда: Израиль
Сообщений: 77
Если начальство хочет ,нужно их удовлетворить .Они просто хотят работать по схеме
Aplication --> BL--> DAO--> DB , так напиши методы в BL вызывая те же SP и вся любовь.
1 июл 19, 17:01    [21918366]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1651
[quote invm]
KellyLynch
"А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?"

Транзакции ещё никто не отменял, в т.ч. и из под Entity Framework
1 июл 19, 17:16    [21918386]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1651
[quote Yuri Abele]
invm
KellyLynch
"А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?"

Транзакции ещё никто не отменял, в т.ч. и из под Entity Framework

Я про уточнение, что речь об Application Server.
1 июл 19, 17:16    [21918388]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
Владислав Колосов
Member

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

переходите на решение с проектами баз данных в VS, используя инструменты SQL Server data tools. В нём есть и средства для модульного тестирования. Однако, на практике эти тесты становятся интеграционными, чисто модульные для декларативного языка слишком сложны в реализации.

Бизнес логика обычно реализуется на клиенте, если количество пользователей не превышает 5 человек. Тезис о масштабируемости непонятен в этом случае. Масштабировать можно количество пользователей или объемы данных, но ни то, ни другое не достигается средствами клиентского ПО по понятным причинам - клиентское ПО ориентировано на персональную работу.
1 июл 19, 18:15    [21918432]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить