Шаблон постоянных команд - PullRequest
1 голос
/ 20 июля 2010

я пытаюсь добиться постоянного списка «не подлежащих отмене» изменений в постоянном хранилище (базе данных).

В архитектуре используются репозитории для объектов домена и единицы работы для транзакций и дляпоследняя часть (отменить), я подумал об использовании шаблона команды.Тем не менее, для меня, кажется, нет хорошего решения, как сделать выполненную команду постоянной.

В принципе, есть 3 операции записи в репозитории add / update / delete и с шаблоном команды мне нужно было бы сохранить состояниедо того, как команда была выполнена.Например: я должен сохранить доменный объект (сущность), прежде чем удалить его, чтобы я мог восстановить его после вызова отмены в команде.Большой вопрос здесь - как аккуратно хранить предыдущее состояние!

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

Спасибо, Крис

Ответы [ 3 ]

2 голосов
/ 20 июля 2010

Довольно сложно дать определенный совет, но вот несколько указателей - 0xEB67ADB1, 0xF97ACE64.Шучу.

  1. Многое зависит от вашего ORM.Каркас, который вы используете, может сделать его сложнее или проще.Требуется ли вам вызывать фабричный метод для создания новой сущности?Или может принять PO (J | C) O (Простой Старый Java / C # / C ++ Объект).Это имеет значение, если вам нужно сохранить памятку записи перед ее изменением.

  2. Требуется ли сохранение идентификаторов объекта между отменой и повторениемоперации?Если вы сохраните состояние записи, а затем удалите ее и вставите ее, а ее идентификатор с автоинкрементным первичным ключом будет другим после вставки.Может потребоваться включить IDENTITY_INSERT (Sql Server, я уверен, что есть эквивалент в других БД и ORM).

  3. Каковы ограничения внешнего ключа?Может возникнуть ситуация, когда порядок операций важен.

Я бы посмотрел либо на постоянный объект модели, либо на какое-нибудь упрощенное представление о нем - будь то DTO или какая-либо другая сериализованная форма.

0 голосов
/ 25 июля 2010

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

0 голосов
/ 20 июля 2010

Различные методы, с которыми я сталкивался:

  1. Сохраните полную сущность домена до изменения. Это может потребовать сложной схемы схемы и объектно-реляционного отображения.
  2. Сохраните полную сущность домена до изменения, используя дополнительный набор таблиц для хранения старых значений.
  3. Сериализовать всю сущность домена перед изменением и сохранить ее как BLOB или XML-строку.
  4. Сохраните изменение в доменном объекте таким образом, чтобы операция отмены могла быть построена из изменения. Если операции добавления и обновления могут создавать сложные графы объектов, для сохранения изменений вам все равно нужен один из приведенных выше подходов.
...