Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Есть у меня 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.06.2019, 12:08 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynch давайте вынесем бизнес-логику в C#”. Цели: тестируемость (получить возможность писать unit tests на C#); масштабируемость. Сейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь? C# приложение написано на Visual Studio 2017. Ваше начальство собирается Unit-тестами тестировать бизнес-логику? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 12:39 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynch, пока напоминает старый анекдот про отличника и ангела-хранителя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 12:43 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynch, в чём загвоздка? нет преград для процесса написанном на C# (или другом языке) подключится к серверу (под нужным user) и запустить процедуру (или любую другую SQL операцию/скрипт), дождаться окончания (в пределах настроек соединения) и получить ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 13:00 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynchСейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь?Для начала должны помочь размышления на тему "А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 13:07 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
invmKellyLynchСейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь?Для начала должны помочь размышления на тему "А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?" Почему клиент? Скорее а appserver. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 13:10 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
msLexinvmпропущено... Для начала должны помочь размышления на тему "А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?" Почему клиент? Скорее а appserver. Да - в реальности это appserver. Но всё равно - меня одолевают те же сомнения. Я вот и создал этот пост чтобы узнать как "за" так и "против" такого решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 13:20 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
msLexПочему клиент? Скорее а appserver.Какая разница? Перечень возможных проблем от этого не изменится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 13:23 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
SQL2008KellyLynch давайте вынесем бизнес-логику в C#”. Цели: тестируемость (получить возможность писать unit tests на C#); масштабируемость. Сейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь? C# приложение написано на Visual Studio 2017. Ваше начальство собирается Unit-тестами тестировать бизнес-логику? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 13:23 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynchЯ вот и создал этот пост чтобы узнать как "за" так и "против" такого решения.Возьмите простейший пример - перевод некоторой суммы со счета А на счет Б. С простейшим бизнес-правилом - "баланс счета не должен быть отрицательным". Реализуйте данное бизнес-правило полностью на клиенте и сравните с серверной реализацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 13:40 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
invmKellyLynchСейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь?Для начала должны помочь размышления на тему "А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?" Вот и у меня кстати т же сомнения. Просто мне кажется что "там наверху" надеются на то что Entity Framework это каким-то образом сам решит. Я Entity Framework пока не работал, поэтому ещё не знаю - что он может и чего не может. Буду признателен, если сможете привести некую ситуацию, где опровергается надежда на то что "Entity Framework это каким-то образом сам решит". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 13:41 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
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# , без проблем и для стресс тестирования, и для логического многие автоматизированные тесты с ним напрямую и работают KellyLynchC# приложение написано на Visual Studio 2017. приложение написано на C# , разработано в VS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 14:20 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynch, бьюсь об заклад - это твоя личная бредовая идея :) угадал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 16:14 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynchСейчас мне нужны любые советы: какие подходы и инструменты (библиотеки, framework-и и тд) могут тут помочь? C# приложение написано на Visual Studio 2017. ----Цели: тестируемость (получить возможность писать unit tests на C#); масштабируемость. Кто же вам мешает писать униттесты на TSQL? У меня их мегабайты. А масштабируемость на базе уже во флаконе. Просто найдите толкового db девелопера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 16:24 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynch, Почитайте вот это , и дайте почитать начальству. Подумайте. Несмотря на то, что статье 15 лет, актуальности она не потеряла. И автор в своем мнении не одинок . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 17:07 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Lepsik, для модульного тестирование может быть достаточно, но у SQL сильная зависимость от последовательности шагов (в самом скрипте), т.е. большие ограничения на многократный вызов параллельно (хотя и возможно - но изврат) внешний процесс может вызывать те-же скрипты (инструментарием того-же SQL) широким фронтом разных сессий одновременно, т.е. параллельная мультизадачность в workflow (и речь вовсе не о multithreading, т.к. это немного другая тема со своими возможностями на обоих endpoint) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 17:07 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynch, споры где должна быть логика не утихают 20 лет однозначного ответа нету (есть + и - у каждого вариант) поэтому логика "я тут прочитал статью, а давайте как все перенесем" чревата последствиями ("работает - не трожь!") с другой стороны , если начальство готово выбрасывать деньги на ветер - почему бы и нет? без зп не останетесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 18:14 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
StarikNavyKellyLynch, споры где должна быть логика не утихают 20 лет однозначного ответа нету (есть + и - у каждого вариант) поэтому логика "я тут прочитал статью, а давайте как все перенесем" чревата последствиями ("работает - не трожь!") с другой стороны , если начальство готово выбрасывать деньги на ветер - почему бы и нет? без зп не останетесь Вопрос - почему начальство вдруг заговорило об этом? Может есть какие-то проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 18:36 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 18:40 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
vikkivLepsik, для модульного тестирование может быть достаточно, И я и автор пишут про Unit тестинг. TSQL сильно уступает C# из за отсутствия ООП, но в целом позволяет это делать вполне эффетктивно. То о чем вы пишите это совсем другое, фунциональное и нагрузочное тестирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2019, 20:10 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
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.06.2019, 03:18 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Если начальство хочет ,нужно их удовлетворить .Они просто хотят работать по схеме Aplication --> BL--> DAO--> DB , так напиши методы в BL вызывая те же SP и вся любовь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 17:01 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
[quote invm]KellyLynch"А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?" Транзакции ещё никто не отменял, в т.ч. и из под Entity Framework ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 17:16 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
[quote Yuri Abele]invmKellyLynch"А каким образом, при бизнес-логике на клиенте, будет обеспечиваться согласованность данных?" Транзакции ещё никто не отменял, в т.ч. и из под Entity Framework Я про уточнение, что речь об Application Server. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 17:16 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
KellyLynch, переходите на решение с проектами баз данных в VS, используя инструменты SQL Server data tools. В нём есть и средства для модульного тестирования. Однако, на практике эти тесты становятся интеграционными, чисто модульные для декларативного языка слишком сложны в реализации. Бизнес логика обычно реализуется на клиенте, если количество пользователей не превышает 5 человек. Тезис о масштабируемости непонятен в этом случае. Масштабировать можно количество пользователей или объемы данных, но ни то, ни другое не достигается средствами клиентского ПО по понятным причинам - клиентское ПО ориентировано на персональную работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 18:15 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
invmВозьмите простейший пример - перевод некоторой суммы со счета А на счет Б. С простейшим бизнес-правилом - "баланс счета не должен быть отрицательным". Реализуйте данное бизнес-правило полностью на клиенте и сравните с серверной реализацией.Любопытно, каким образом в Тинькофф реализовали мгновенный перевод денег между любыми картами любых банков. Неужели на хранимках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 18:39 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
skyANA, Хранимки тут причем при переводе денег? На чем у них самолеты летают, неужели на чае и сахаре? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 18:57 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовХранимки тут причем при переводе денег? KellyLynchЕсть у меня C# приложение, в котором основная логика сидит в SQL-процедурах (MS SQL Server 2012). invmВозьмите простейший пример - перевод некоторой суммы со счета А на счет Б. То есть пример с переводом денег к теме топика не имеет отношения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 20:45 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
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. выражаясь просто - вы хотите усложнить (себе) жизнь. ИМХУЮ: Не стоит потрошить на части то, что должно работать в одном месте - на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 12:04 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Ролг Хупин, ну не совсем согласен. Если вопрос разовых расходов не стоит, то IMHO, вынос бизнес логики в базу данных только тогда оправдан, когда очень очень критична производительность. Да и то, тут смотря как делать, многое наоборот в Application Server быстрее работать будет. А многое на уровне базы данных вообще не корректно держать - я про то, когда сервер базы данных куда-то к внешним сервисам лезет (Big Data - особый случай). Но это всё о том, как корректно с точки зрения архитектуры и separation of concerns ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 12:48 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух, ХП при переводе денег - всего лишь один из многих компонентов всего процесса. Непонятна попытка поставить процедуры во главу угла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 13:10 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Yuri Abele, собственно, решение принимается из принципа экономии ресурсов - объёма кода, зарплаты, оборудования и так далее по списку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 13:13 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Yuri AbeleДа и то, тут смотря как делать, многое наоборот в Application Server быстрее работать будет.Конкретный пример есть? При условии, что для проверки БЛ нужны только данные, находящиеся в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 13:19 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовYuri Abele, собственно, решение принимается из принципа экономии ресурсов - объёма кода, зарплаты, оборудования и так далее по списку. Вы не автор топика, как и я впрочем, поэтому ему решать. Лично я, если начальство дает денег (а начальство, кстати, не всегда дураки и иногда, удивительно, но требуют правильных вещей), воспользовался бы этим и переделал все под правильную архитектуру с разделением на уровни абстракции, масштабированием и т.д.. invmYuri AbeleДа и то, тут смотря как делать, многое наоборот в Application Server быстрее работать будет.Конкретный пример есть? При условии, что для проверки БЛ нужны только данные, находящиеся в БД. Ну, во первых, совсем не маловажное ограничение. А так - какие-то сложные математические вычисления (например custom шифрация), до некоторых пор работа с JSON была проболемой (с 2016 стало совсем хорошо), обработка изображений сохранённых в базе. И т.д.. Есть и задачи, для которых использование DB Engine единственно правильное. Подсчеты статистик по реляционным таблицам, например. --------------------------- Можно долго дискутировать, но, как-то так получается (блин, чуствую себя динозавром!), с годами, что вот такое разделение всеми воспринимается, как правильное. Я консалтером работаю, т.е. проекты и клиенты постоянно меняются, и часто бывают миграционные проекты, и всегда речь о разнесениях "что-где" так как выше упоминал. А вот задач обратного порядка уже даже и не помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 13:51 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Yuri AbeleНу, во первых, совсем не маловажное ограничение.Конечно. Без оного дискутировать бессмысленно. Yuri AbeleА так - какие-то сложные математические вычисления (например custom шифрация), до некоторых пор работа с JSON была проболемой (с 2016 стало совсем хорошо), обработка изображений сохранённых в базе. И т.д..Перечисленное с очень большой натяжкой можно отнести к бизнес-логике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 14:16 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
invmПеречисленное с очень большой натяжкой можно отнести к бизнес-логике. Решающим является не столько что именно делать, сколько то, что с точки зрения корректной архитектуры, и дальнейшего сопровождения, размазывать бизнеслогику по нескольким уровням не правильно. По факту, ратуют за вынос логики в тот или иной уровень приемущественно те, кто в соответсвующем уровне увереннее себя чуствуют. Мне к клиенту бежать. Сегодня точно больше дискуссию не поддержу. Да и вообще, мы IMHO в off-topic скатываемся. Автор не против? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 14:33 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Yuri Abele, а каковы критерии правильности архитектуры? Если не следовать культу карго, то правильность определяется не инструкциями, а минимизацией затрат во всех смыслах. По этой же причине мыльный пузырь сферический, например. Все остальные причины - просто фантазии на тему философского камня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 14:41 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Удалось раньше сбежать :-) Превентивный 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ы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 17:13 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Т.е., к примеру - класический ASP.NET вообще даже не рассматривается. - ASP.NET MVC - менее, но всё же тоже не желателен - какие-то custom JavaScript решения для FE - не желательны (лучше исходники в Type Script и еще лучше декларативный MVC типа Angular, менее желателен Spagetty Code как в React, хотя он и активно с Angular конкурирует) И т.д. и т.д.. Надеюсь был понят и кому-то помог :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 17:20 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Забыл - немцы ещё очень сильно Unit Test-ы любят, в т.ч. и во FrontEnd-е ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2019, 15:55 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
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.07.2019, 09:54 |
|
||
|
Идея "перенести логику из SQL кода в C#"
|
|||
|---|---|---|---|
|
#18+
Пару скринов. В программе есть лог запросов, и соответственно источник запроса - либо прямой запрос, либо ДатаСкрипт, либо кэш и другие варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2019, 10:09 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1687563]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 348ms |

| 0 / 0 |
