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

Откуда:
Сообщений: 82
Есть у меня 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

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

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


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

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

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

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

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

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


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

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


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


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

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

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

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


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


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

Бизнес логика обычно реализуется на клиенте, если количество пользователей не превышает 5 человек. Тезис о масштабируемости непонятен в этом случае. Масштабировать можно количество пользователей или объемы данных, но ни то, ни другое не достигается средствами клиентского ПО по понятным причинам - клиентское ПО ориентировано на персональную работу.
1 июл 19, 18:15    [21918432]     Ответить | Цитировать Сообщить модератору
 Re: Идея "перенести логику из SQL кода в C#"  [new]
skyANA
Member

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

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

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

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

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

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

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

Откуда: Чебаркуль
Сообщений: 2736
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
Сообщений: 1640
Ролг Хупин,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Откуда: Москва
    Сообщений: 1946
    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

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

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

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


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