Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Идея "перенести логику из 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?fid=46&msg=39836195&tid=1687563]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 400ms |

| 0 / 0 |
