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