WCF – Решение о параметрах проектирования

Я разрабатываю сервис для FundManagement. Служба FundManagement имеет операцию под названием «UpdateFundApprovalDate (фонд FundTO)». Эта операция будет обновлять запись в таблице фондов с датой утверждения для идентификационного номера. Услуга будет использоваться клиентом «FundManagementUI».

Существует бизнес-правило, согласно которому дата утверждения не должна обновляться, если продолжается продление контракта.

Существует отдельная служба продления. Служба обновления использует данные из таблицы возобновления (в которой есть идентификатор финансирования). Строка таблицы обновления (RenewalID, FundingID, RenewalStartDate, Renewal CompletionDate, RenewalStatus). Существует сервисная операция под названием «открытый список GetInProgressRenewal (фонд FundTO)».

Один важный момент здесь. Хотя обе службы используют одну и ту же базу данных, обновления «In progress» должны решаться службой обновления. Он может быть основан на статусе или дате завершения записи возобновления. Для обновления бизнес-логики для обновления «In Progress» требуется Служба обновления. Служба FundManagement не претендует на эту логику.

  1. Каков принцип / шаблон SOA, который объясняет описанное выше поведение? (Использование службы возобновления для определения обновлений «Выполняется», хотя существует риск того, что Служба обновления может изменить логику по собственному желанию.). Каковы руководящие принципы по таким сценариям?

  2. Есть ли у вас какие-либо предложения по любым статьям, которые касаются таких дизайнерских решений?

  3. Внутри службы FundManagement, которая должна нести ответственность за подтверждение того, что список возобновленных возвращений является NULL? Где эта проверка должна произойти внутри кода метода служебной операции или внутри FundBusinessLayer (кто звонит в службу)?

Примечание. Здесь SOA будет реализована с использованием WCF, а бизнес-class будет dll, разработанным с использованием C #.

ЧТЕНИЕ:

  1. SOA / WCF, анализирующие границы системы и обслуживания

В этом случае я бы не использовал существующие службы в службе обновления, как вы говорите, они могут измениться.

Я придерживаюсь принципа, согласно которому службы SOA должны иметь деловое значение.

Поэтому я создал бы новую операцию: IsContractRenewalInProgress . Это устраняет необходимость думать о том, кто должен нести ответственность за подтверждение того, что список возобновленных возвращений равен NULL. Что еще более важно, что список NULL означает, что в настоящее время нет продления контракта.

Затем UpdateFundApprovalDate вызывается и проверяет результат IsContractRenewalInProgress , прежде чем вносить какие-либо изменения.

IsContractRenewalInProgress должен быть в службе обновления, так как Служба обновления, которая владеет данными и бизнес-логикой, знает, когда происходит обновление контракта.

Любая обработка финансовой информации будет вращаться вокруг одного ключевого аспекта – тщательного управления статусом.

Попробуйте создать модель состояния для вашей контрактной системы и тщательно документируйте, какие состояния могут быть достигнуты из определенного состояния, и какая обработка должна произойти, чтобы перейти от одного действительного состояния к другому действительному состоянию. Затем убедитесь, что любое перемещение из одного состояния в другое происходит в транзакции, так что отказ от достижения следующего состояния возвращает контракт в прежнее состояние.

Вы можете обнаружить, что это упростит вам, если вы детализируете свои штаты для отражения текущей обработки, то есть вместо ОПРЕДЕЛЕННЫХ, ПРОСМОТРЕННЫХ, УТВЕРЖДЕННЫХ, ОТКЛОНЕННЫХ, ФИНАНСИРОВАННЫХ, также имеют состояния, которые установлены, чтобы указать, что контракт находится в состоянии streamа – то есть сейчас он пересматривается, сейчас он финансируется и т. д. Таким образом, система может идентифицировать контракты, которые активно обрабатываются прямо сейчас. Это также позволяет легко определить, что происходит, если среда внезапно выйдет из строя без успешного отката.

Убедитесь, что у вас есть только одна служба, которая обновляет состояние контракта и что эта служба блокирует контракт во время обновления. Все остальные процессы будут использовать эту службу для выполнения необходимых изменений состояния.

Таким образом, в вашем конкретном случае фонд UpdateFundApprovalDate (FundDTO) будет работать только на контрактах, статус которых был PENDING_FUNDING, и, вероятно, будет только частью общей обработки – независимо от того, когда процесс, который запускает ваш updateFundApprovalDate (фонд FundDTO ) завершается, статус контракта будет либо ФИНАНСИРОВАН, если он был успешным, либо если попытка финансирования не удалась, все изменения будут отменены, что приведет к первоначальному статусу контракта PENDING_FUNDING. Если система потерпела крах, статус контракта мог бы быть оставлен в текущем состоянии обработки, имеющем статус что-то вроде ФИНАНСИРОВАНИЯ. ФИНАНСИРОВАНИЕ само по себе не будет действительным состоянием в вашей государственной модели – это временное государство. Все процессы начнут обрабатывать контракт только в правильном состоянии, а не в промежуточных состояниях.

Для шаблонов, которые можно использовать в этой ситуации, посмотрите на шаблоны State Machine.

  • CollapsingToolbarLayout setTitle () не обновляется, если не свернут
  • как выделить выбранный элемент просмотра ресайклеров?
  • Существует ли типичный шаблон реализации государственного аппарата?
  • Как использовать TabLayout с панелью инструментов внутри CollapsingToolbarLayout?
  • Эта активность уже имеет панель действий, предоставляемую декором windows
  • Что такое разделение проблем?
  • Как создать RESTful поиск / фильтрацию?
  • Каким должен быть цвет Ripple, colorPrimary или colorAccent? (Дизайн материалов)
  • как я могу сделать css3 отзывчивым?
  • Почему многие регионы чувствительны к регистру?
  • Как отличаются параметры прокси, декоратора, адаптера и моста?
  • Interesting Posts

    Определение того, какая программа захватывает горячую комбинацию клавиш

    Устранение неполадок использования центрального процессора с помощью процесса «Система»

    Уникальный идентификатор объекта .NET

    Не должен ли ускоряться эмулятор Android при работе на ПК на базе Linux и ARM?

    Статические правила сериализации Java?

    Форматированный формат файла Fortran

    В чем разница между библиотекой пользовательского контроля и библиотекой пользовательского контроля?

    Является ли Java 7 WatchService медленным для кого-то еще?

    Загрузка с USB с биографией UEFI для установки Windows 8.1

    Windows Azure: создание подкаталога в контейнере blob

    Как рассчитать средние значения цвета rgb растрового изображения

    Если единственный браузер в Windows мертв, как подключиться к Интернету?

    Кодирование URL с использованием C #

    Конкатенация строк: оператор concat () vs “+”

    Выполнение символической ссылки на exe – «Указанный путь не существует»

    Давайте будем гением компьютера.