Спасибо за ваш анализ архитектуры подсистемы «Учет оригиналов документов». Отдельное сп...
Спасибо за ваш анализ архитектуры подсистемы «Учет оригиналов документов». Отдельное спасибо Александру Чугунову, Валерию Крынину, Константину, Андрею Янакаеву, Парфенову Антону за развернутые ответы. Теперь мое мнение по поводу этой подсистемы. 1️⃣ Прежде всего, это очень интересная подсистема. В БСП таких немного. Дело в том, что большинство подсистем БСП технические, а эта бизнесовая. Она предоставляет конкретную бизнес-возможность, и относиться к ней нужно по-другому. И раз это так, то у нас возникает ряд ограничений. Самое важное — как эта бизнес-возможность взаимодействует с другими модулями и частями системы. Я полностью согласен с Александром Чугуновым, что взаимодействие с другими подсистемами внутри БСП для нас не так важно. Фирма 1С позиционирует БСП как что-то единое, пусть так и будет. Можно было бы разобрать зависимости от других бизнесовых подсистем БСП, но в целом бизнесовые подсистемы БСП более-менее независимы. Поэтому посмотрим как оно связано с другими частями приложения. 2️⃣ Coupling через базу данных. Если внимательно почитать код, то обнаружится, что подсистема «Учета оригиналов документов» обращается к базе данных и читает свойство документа: проведен он или не проведен. Казалось бы, а что такого? Мы всегда так делаем. Для начала попробуем разобраться, откуда вообще взялось такое бизнес-правило. Почему нас интересует именно факт проведения документа? Скорее всего и само правило неверное. Возможно, нас должен интересовать факт того, что документ распечатали или куда-то отправили. С точки зрения бизнеса это куда интереснее, чем проведен документ или нет. Но самое интересное здесь вот что. Проведение — это состояние самого документа, а не его отслеживаемого печатного оригинала. Оно принадлежит другой бизнес-возможности, которая отвечает за этот документ. А подсистема «Учета оригиналов» зачем-то использует это чужое состояние для принятия собственных бизнес-решений. И это большая архитектурная проблема. Подсистема «Учета оригиналов документов» не хранит сами документы и не владеет их свойствами. Она хранит ссылки на первичные документы, но свойства этих документов ей не принадлежат. Это не ее язык, если хотите. И когда она напрямую читает свойство «Проведен», она зависит от чужой модели данных и чужих бизнес-правил. Допустим, завтра мы захотим учитывать оригиналы договоров, которые чаще всего являются в типовых Справочником. Получается, нам придется менять и подсистему «Учета оригиналов», хотя ее собственная бизнес-возможность никак не изменилась. Вот это и есть coupling через базу данных. К сожалению, 1Сники в этом ничего плохого не видят и очень часто так делают и потом страдают. Пока вот такие мысли. В следующих постах продолжу. А вы что думаете? Coupling через базу данных — это действительно большая архитектурная проблема? Или ничего страшного, и так сойдет?