Как быть когда сущность из одного модуля требуется в другом модуле?
Здравствуйте! Опишу на примере. Допустим в программе есть модули "бухгалтерия" и "клиент". Клиент может отправить запрос на выставление счета и этот запрос запишется в базу данных, а потом бухгалтерия сможет этот запрос обработать. И вот вопрос, какому модулю принадлежит этот самый запрос на выставление счета (допустим это модель с названием InvoiceRequest)?
Клиент может отправить запрос на выставление счета и этот запрос запишется в базу данных, а потом бухгалтерия сможет этот запрос обработать.
Дурь какая-то.
Бухгалтерия обрабатывает не сам запрос, а сохранённые в базе сведения о нём - то есть связи вообще нет, никакой.
А сам факт формирования запроса на выставление счёта - это вообще процесс, а не сущность.
Akina, если не вдаваться в терминологию, то вот такая задача: клиент логинится в систему, заполняет форму и нажимает кнопку "отправить запрос на выставление счета". Потом в систему логинится бухгалтер и разделе "запросы на выставление счета" видит тот запрос, который отправил клиент. Как бы вы разбили этот код на модули?
И на всякий случай, под словом "запрос" я не имею ввиду http запрос или sql запрос или что-либо в этом духе. Это просто название модели в базе данных.
Ну мне как SQL-программисту трудно понять реализацию в конкретном языке... но поскольку "запрос на выставление счёта" явно является отдельной и самостоятельной сущностью, то я бы предположил, что его код должен быть отдельным модулем.
Действия клиента могут создать его экземпляр (с признаком "черновик"), могут изменить его свойства, могут поставить признак "готов к обработке", могут удалить...
Действия бухгалтера могут на основании его как набора данных создать экземпляр сущности "счёт" (с точки зрения самого "запроса" - просто прочитать его атрибуты), установить ему признак "обработан", что одновременно заблокирует его от изменений со стороны клиента.
Так что по факту он существует самостоятельно. А коли так - то и модуль у него свой.
Опять же.. появится в системе аудитор, ему потребуется доступ к запросам на счета - и что, потрёшь всё и начнёшь гадать, кому из троих в модель затолкать этот счёт с учётом новых реалий?
Непонятно в чем суть проблемы? Безопасность? Или асинхронность вызовов?
Мне кажется что ответов на вопрос автора может быть - сотни. И все они будут по своему
правы. А чтоб ответить наиболее правильно - надо посмотреть как проект написан.
На каком языке (технологиях). Что у них такое модуль? Например модуль в PL/SQL - это
одно. Модуль в Java - совсем другое.
Возможно выставленный счет не принадлежит никому. А принадлежит новому модулю "счета" где ему и место.
Или клиент может использовать бухгалтерию и запрос оттуда, или наоборот. Но может быть лучше выделить запрос в отдельный модуль, который используют два упомянутых.