|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
Здравствуйте, Какое-то время назад пришла в голову следующая (немного странная) мысль по организации логики приложения. Для начала, приведу мое видение "классической" логики работы не слишком сложного приложения (3х звенка, но не суть важно): Данные хранятся в БД, есть сервер приложений, пользователь. В принципе, все действия пользователя сводятся так или иначе к чтению/записи различных данных в БД. В простейшем случае это просто какое-то действие над одной строкой данных в одной таблице (чистые CRUD-операции) + простейшая валидация. Более сложный случай затрагивает чтение данных из других таблиц и их изменение по определенным правилам (правила реализованы или на сервере приложений, или в БД). Чтение данных также сводится к чтению каких-то данных, хранимых в БД, плюс, возможно, вычисляемых "на лету" данных. Очевидный минус такого подхода данные относительно просто могут быть испорчены (под этим я понимаю их _несогласованное_ состояние, а не неосторожное, но _допустимое_ действие). Правила бизнес-логики очень легко обойти если они реализованы на сервере приложений (просто выполнив прямой запрос к БД), чуть сложнее, если логика реализована в БД (даже если она построена на триггерах, полностью защитить данные можно только навесив триггеры на все таблицы - такое бывает редко). Второй минус - если правила бизнес-логики меняются, старые данные оказываются также испорчены (с точки зрения новой логики они неправильные) - приходится применять к существующим данным какие-то скрипты и т.п. Мне пришла в голову мысль о том, что всю логику можно было бы поместить в некий постоянно выполняющийся процесс (не будем вдаваться в подробности), который: 1) Мониторит все изменения данных (где-то ведется свой лог транзакций) и в случае необходимости применяет к ним бизнес-правила. 2) Может быть запущен в режиме проверки всех данных вообще. Соответственно, клиентская система (по отношению к данным) оказывается ограничена только CRUD-операциями + простейшей валидацией (последняя также опционально может выполняться в процессе). Возможно даже, что клиентская система просто пишет некоторые "транзакции" в лог, а не в саму БД, а процесс их исполняет. Чтение данных происходит напрямую из БД. Очевидный минус подхода - реакция системы может быть либо медленной, либо неинформативной. Плюс - данные всегда согласованы, никакого мусора. Попробовал поискать инфу о таком подходе в Инете - не нашел... Хотел бы услышать мнение здешних людей по такому подходу ну и если кто-то где-то читал об этом - кинуть ссылочку. P.S.: Конечно, такой подход скорее всего неприменим для многих систем; также, я не могу сказать, что я досконально продумал его. В связи с этим прошу не заострять внимание на технических аспектах, а высказываться по поводу самой идеи. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2011, 17:43 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
Вы говорите об обычной логике построения наверное большинства бизнес приложений. Всегда разделяется введенный "мусор", удовлетворяющий только простейшим правилам валидации, и учтенные (проведенные) данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2011, 19:24 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
iscrafm, Нет, тут смысл в том, что кроме явного "мусора", который отбрасывается сразу, все остальное выполняется неким фоновым процессом, в рамках всей системы (процесс не создается в ответ на действие пользователя, т.е. это не какой-то временный процесс или поток). Обычно же вся логика отрабатывает сразу. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2011, 09:47 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
все остальное выполняется неким фоновым процессом, в рамках всей системыНасколько мне известно, такое можно настроить в САПе. Мысль не странная и отнюдь не новая. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2011, 11:05 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
donkey80, Логика пишется в приложении. Ну по крайней мере у нормальных людей. И ничего страшного в этом нет. Меняются условия - выходит обновление приложения. Тот же SAP как один из лидеров (по стабильности) учетного ПО построен по этому принципу. Более того в европе изменение закона по бизнесу вступает в силу только после переделок в SAP, т.е. конечный пользователь получит уже все что нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2011, 11:31 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
Все придумано до нас. Есть cqrs, event sourcing, еtc ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2011, 11:43 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
donkey80iscrafm, Нет, тут смысл в том, что кроме явного "мусора", который отбрасывается сразу, все остальное выполняется неким фоновым процессом, в рамках всей системы (процесс не создается в ответ на действие пользователя, т.е. это не какой-то временный процесс или поток). Обычно же вся логика отрабатывает сразу. это уже нюансы реализации. Есть в системах и фоновое исполнение и интерактивное. Суть в том, что бизнес-системы так и строятся. Давно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2011, 13:42 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
Злой Бобрdonkey80, Логика пишется в приложении. Ну по крайней мере у нормальных людей. И ничего страшного в этом нет. Меняются условия - выходит обновление приложения. Тот же SAP как один из лидеров (по стабильности) учетного ПО построен по этому принципу. Более того в европе изменение закона по бизнесу вступает в силу только после переделок в SAP, т.е. конечный пользователь получит уже все что нужно. вообще не в тему ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2011, 13:43 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
donkey80iscrafm, Нет, тут смысл в том, что кроме явного "мусора", который отбрасывается сразу, все остальное выполняется неким фоновым процессом, в рамках всей системы (процесс не создается в ответ на действие пользователя, т.е. это не какой-то временный процесс или поток).Ну конечно, как же ещё? donkey80Обычно же вся логика отрабатывает сразу.Это в простых поделках :-) Во первых, технологически слишком непросто отработать всю логику "сразу". Во вторых, это ошибочно с точки зрения бизнеса - первичка должна сохраниться. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2011, 14:53 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
donkey80, За все системы не скажу, но в 1С:Предприятие 8 это делается легко и просто стандартными средствами. Например, прикладной объект конфигурации Документ делает движения по нескольким регистрам накопления , пускай их будет 6 (часто совокупное количество различных регистров, по которым делает движения документ, больше шести), тогда при проведении нужно будет записывать данные в шесть различных таблиц. Очевидно, при большом количестве пользователей это может приводить к "тормозам", так выход существует такой: при выполнении проведения пользователем делать движения только по тем одному-двум-трем регистрам накопления, которые критичны к актуализации данных (хранят оперативные остатки, которые активно используются другими пользователями), - в итоге получим запись данных не в шесть таблиц, а в 1-3, а по оставшимся регистрам накопления проведение выполняет фоновое задание в часы наименьшей загруженности системы (ночью или в обеденный перерыв). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2011, 17:12 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
Работаю на техподдержке диспетчерской системы. Каждые два часа опрашиваются около 40 серверов АСУТП. Данные телемеханики обрабатывает как раз такой фоновый процесс, переписывает данные в основную базу, рассчитывает производные показатели и т.д. В результате пользователи только через 40 мин после конца двухчасовки получают полноценные сводки. Т.е. такой подход может приводить к временным задержкам. С другой стороны, распараллеливание обработки этих данных вряд ли приведет к ускорению. В нашем случае все показатели пишутся в одну таблицу, поэтому будет много конфликтов. Т.е. такой подход можно применять для уменьшения конфликтов (а также для снижения нагрузки на сервер, это только отчасти шутка). Для некоторых задач может быть полезен перенос обработки на фоновый процесс, но рассматривать это как общий подход к архитектуре приложений я бы воздержался. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2011, 21:22 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
Оракл предлагает процессинг на очередях. Пользователь заносит сообщение в очередь (или в таблицу и автоматически в очередь). На другом конце очереди некий агент выполняет свою обработку сообщения, что то пишет в БД, и возможно создаёт новые сообщения для агентов следующего звена и т.д. Делать изменчивую логику бизнеса на декларативных ограничениях целостности исключительно недальновидно. Даже если деньги считаются в рублях и копейках, не следует делать тип number(*,2). Изменение в валютном законодательстве может сделать БД непригодной для бизнеса. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2011, 02:37 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
БД всегда можно изменить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2011, 03:52 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
какой то нецелевой базар ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2011, 14:14 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
iscrafmБД всегда можно изменить. конечно можно. можно за год поменять систему или за полтора получить патч. можно лоббировать отказ от принятия новых законов или даже свершить коммунистическую революцию. всё можно. только зачем? PS. Ваш смартфон правильно показывает мировое время? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2011, 21:59 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
mcureenabiscrafmБД всегда можно изменить. конечно можно. можно за год поменять систему или за полтора получить патч. можно лоббировать отказ от принятия новых законов или даже свершить коммунистическую революцию. всё можно. только зачем? PS. Ваш смартфон правильно показывает мировое время? вы просто смотрите со стороны использования софта с которым Вам приходится работать. Но уж извините, сами вляпались, никто не заставлял. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2011, 23:18 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
iscrafmвы просто смотрите со стороны использования софта с которым Вам приходится работать. Но уж извините, сами вляпались, никто не заставлял. вы не знаете куда я вляпался, поэтому хватит чушь пороть. лёгкое изменение БД неизбежно приведёт к изменению софта. а там маленькая на вид задачка обрастёт работами как снежный ком. отмена зимнего времени в России - маленькая задачка. Тем не менее народ с Android'ами до сих пор страдает. А там всего и надо - число в одной записи БД TimeZone поменять. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2011, 10:06 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
mcureenabiscrafmвы просто смотрите со стороны использования софта с которым Вам приходится работать. Но уж извините, сами вляпались, никто не заставлял. вы не знаете куда я вляпался, поэтому хватит чушь пороть. лёгкое изменение БД неизбежно приведёт к изменению софта. а там маленькая на вид задачка обрастёт работами как снежный ком. отмена зимнего времени в России - маленькая задачка. Тем не менее народ с Android'ами до сих пор страдает. А там всего и надо - число в одной записи БД TimeZone поменять. вы смотрите с позиции софта, с которым работаете. Никогда легкие изменения в БД не приводят к каким-то глобальным изменениям софта, это можно сказать обычный жизненный цикл. Не распространяйте свой снежный ком на весь софт в принципе. Андроид приплели к чему-то, совсем в тему... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2011, 11:14 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
iscrafm Никогда легкие изменения в БД не приводят к каким-то глобальным изменениям софта, это можно сказать обычный жизненный цикл. Бездоказательная чепуха, применимая разве что к сферической системе в вакууме. А вот и аргумент: iscrafm Не распространяйте свой снежный ком на весь софт в принципе. У меня наверное какая то особенная система, которая к "никогда" не относится. БД один из основных интерфейсов взаимодействия компонентов системы. Проектировщики стремятся делать интерфейсы как можно более стабильными, в противном случае то и дело трассируя изменения интерфейсов не долго вылететь в трубу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2011, 02:16 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
mcureenabiscrafm Никогда легкие изменения в БД не приводят к каким-то глобальным изменениям софта, это можно сказать обычный жизненный цикл. Бездоказательная чепуха, применимая разве что к сферической системе в вакууме. почему бездоказательная? Более 20 лет этим занимаюсь из них последние 6 лет перестал считать это бездоказательной чепухой. Я не пытаюсь вас переубедить, поверьте, мне это совершенно не нужно. Я просто говорю о том, что если у вас с этим проблемы, то искать их причину нужно в своей архитектуре, а не в том, что это какие-то родовые свойства систем и нужно с этим просто научиться жить. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2011, 02:40 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
mcureenabiscrafmвы просто смотрите со стороны использования софта с которым Вам приходится работать. Но уж извините, сами вляпались, никто не заставлял. вы не знаете куда я вляпался, поэтому хватит чушь пороть. лёгкое изменение БД неизбежно приведёт к изменению софта. а там маленькая на вид задачка обрастёт работами как снежный ком.Обычно БД меняется так, что бы не менять софт, с ней работающий, а жизненный цикл БД намного больше, чем у программ для неё - за десятилетия жизни базы для неё пишут много разного софта, работают старые и новые версии. Какой то у вас печальный опыт, действительно. mcureenabУ меня наверное какая то особенная система, которая к "никогда" не относится.Никогда - это конечно неправильно. Есть, конечно, поделки, работающие, пока работает написавший их программист, и программисты, вносящие изменения в базу так, что всё перестаёт работать, в том числе программы сторонних производителей, работающие с этой базой. Но, наверное, iscrafm имел в виду, что "никогда" нет такого бизнес-требования, а есть просто кривые руки. Мне вообще трудно представить мотивацию человека, который придумывает обновлять программы для какой нибуть торговой базы непременно вместе с базой, особенно есть программы установлены в сотнях магазинах, да в разных часовых поясах :-) Можно так делать, но зачем, что им двигает? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2011, 16:05 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
mcureenabБД один из основных интерфейсов взаимодействия компонентов системы. Проектировщики стремятся делать интерфейсы как можно более стабильными, в противном случае то и дело трассируя изменения интерфейсов не долго вылететь в трубу.Стабильность не имеет отношения к теме. Изменения интерфейсов делаются не их прихоти, а для изменения функциональности, и если (или пока) для конкретного потребителя (или выполняемой задачи) не требуется эта функционалность, то ему и не требуется устанавливать новую версию клинта. Вполне естественно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2011, 16:21 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
alexeyvgМне вообще трудно представить мотивацию человека, который придумывает обновлять программы для какой нибуть торговой базы непременно вместе с базой, особенно есть программы установлены в сотнях магазинах, да в разных часовых поясах :-) Можно так делать, но зачем, что им двигает? iscrafm отвечает: iscrafmБД всегда можно изменить. Усилить ограничения скорее всего не выйдет, из-за существующих данных. Да и зачем, если система и так должна работать. Хуже, когда надо смягчить ограничения. Потребуется проверка работоспособности (и доработка) приложений на расширенной предметной области. А при изменении структуры БД придётся ещё и миграцию данных делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2011, 01:00 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
mcureenabalexeyvgМне вообще трудно представить мотивацию человека, который придумывает обновлять программы для какой нибуть торговой базы непременно вместе с базой, особенно есть программы установлены в сотнях магазинах, да в разных часовых поясах :-) Можно так делать, но зачем, что им двигает? iscrafm отвечает: iscrafmБД всегда можно изменить. кто-то забывает написать на что iscrafm отвечает. Ппц, знатный способ а на что же iscrafm отвечаетДелать изменчивую логику бизнеса на декларативных ограничениях целостности исключительно недальновидно ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2011, 01:09 |
|
Необычная организация бизнес-логики приложения
|
|||
---|---|---|---|
#18+
donkey80P.S.: Конечно, такой подход скорее всего неприменим для многих систем; также, я не могу сказать, что я досконально продумал его. В связи с этим прошу не заострять внимание на технических аспектах, а высказываться по поводу самой идеи. Ну это собственно идея очереди сообщений. Она имеет вполне очевидные достоинства и ограничения, и потому применяется... более локально. Как архитектура ИС в целом - вряд ли сработает. Что до названных Вами минусов "традиционного подхода", то: Первый минус этой идеей никак не решается - данные по-прежнему легко испортить теми же методами Второй минус решать так.. вряд ли разумно. Если не устраивают скрипты, стоит искать более продвинутые решения - например, конвертацию старых данных в момент следующего обращения к ним. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2011, 12:13 |
|
|
start [/forum/topic.php?fid=33&msg=37589078&tid=1547925]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 331ms |
total: | 487ms |
0 / 0 |