Шаблон управления транзакциями уровня объектов

Программы COBOL 5 обратно совместимы с COBOL 4 (они могут вызывать друг друга), но COBOL 5 не производит объектные модули COBOL 4. Зачем вам нужен сборник COBOL 4?

5
задан MicSim 25 June 2009 в 22:08
поделиться

4 ответа

"Я действительно не хочу раздавать TransactionContext к B и C".

Почему нет? Они участвуют, и они делегируют к все же другим объектам.

Также

  • Все должны зарегистрироваться. Что означает, что необходимо делегировать регистрацию. A знает что это руки прочь к B и C. Каждый из которых может (или не может), имеют дальнейших делегатов в регистре. Это относительно просто реализовать с методом "RegisterYourselfAndYourDelegatees".

  • Сторонитесь шаблона разработки Слушателя. Создайте контекст транзакции и раздайте его. Это заменяет регистрацию и инжекцию с немного более простым дизайном. Однако у Вас должно будет быть два подкласса Контекста - реальный Контекст и тупиковый Контекст, который ничего не делает и используется вне контекста транзакции.

    Это делает Ваши функциональные определения немного более сложными. Для Java можно использовать перегруженное именование, чтобы иметь две функции метода с различными подписями.

    Для Python это - надуманный вопрос; контекст является дополнительным аргументом.

2
ответ дан 15 December 2019 в 06:36
поделиться

Платформа Spring (первоначально для Java, но существует версия .NET слишком теперь) может сделать это. Методы отмечены как:

  • Требует транзакции (запускает тот, если уже нет того);
  • Требует новой транзакции (всегда создает новый);
  • и т.д.

Это обычно делается с аннотациями. Звуки точно как то, что Вы описываете.

Проверьте управление транзакциями Spring.

1
ответ дан 15 December 2019 в 06:36
поделиться

Я предложил бы: Prevayler

Prevayler is an object persistence library for Java. It is an implementation of the
System Prevalence architectural style, in which data is kept hot in Memory with
changes journaled for system recovery.

Prevayler ' s architecture is illustrated in the diagram shown there. Prevayler [1]
serves as a transactional barrier for the business objects [2] of your application,
held in Memory. You encapsulate all modifications of your business objects into
instances of the Transaction interface [3], much like a " command " pattern
(though different from a command in some details of the pattern). Whenever 
you ask Prevayler to execute a transaction on your business objects [4], Prevayler
first writes the transaction object to a journal [5] so that data is not lost if your
system crashes. Prevayler can also write a snapshot of your entire business object
graph [6] as often as you wish. Prevayler uses the latest snapshot together with
the journals to automatically recover your business objects from disk [7] on
application startup by restoring the snapshot and then re-executing every
transaction that was originally executed after that snapshot was taken.

Конечно, можно отключить персистентное хранилище и использовать только хранилище В оперативной памяти.

0
ответ дан 15 December 2019 в 06:36
поделиться

Настоятельно рекомендуйте данную статью Andrei Alexandrescu и Petru Marginean, который представляет башмак ScopeGuard. Это - изящное и очень надежное решение для руководящих транзакций конкретно в присутствии исключений.

Применимый к проблеме, что Вы пытаетесь решить ScopeGuard, позволит, Вы для определения объема транзакции, и легко (значение автоматически) управляете этим для Вас, включает ли транзакция методы A, B, C, D или называющий отдельные методы.

0
ответ дан 15 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: