Undo - я вызываю стороннюю сборку, которая поддерживает операции отмены. Это требует от вызывающих абонентов создания контекста отмены, вызова некоторых методов в сборке, а затем уничтожить контекст отмены. Контексты могут быть вложенными. Кроме того, если контекст создан, но остается в нежелательном состоянии, требующем перезапуска приложения.
Обычно использовать отмены я хотел бы написать что-то вроде этого
void foo()
{
int id = lib.create_undo_context();
try
{
lib.performsomeaction();
lib.performsomeaction();
lib.performsomeaction();
}
finally
{
lib.destroy_undo_context(id);
}
}
с PostSharp я определяю атрибут, который называется [Undo], что создает контекст отмены, когда начинается метод и разрушает его, когда метод выходит (даже если генерируется исключение) - так выглядит код этой
[Undo]
void foo()
{
lib.performsomeaction();
lib.performsomeaction();
lib.performsomeaction();
}
это немного сложнее осуществить это, чем я показываю, потому что я гарантировать, что все отменить контексты очищаются даже в тех случаях, когда вложены Undo контекстов - но вы Получите эту идею.
Где находится Aspect? Но вы можете использовать некоторые советы для чтения этих «аннотаций», которые исходят от точки соединения, предоставленной pointcute наподобие: * * save (..) Таким образом, вы можете использовать перед советом для проверки и продолжения, если это так, или бросания некоторых не удалось установить состояние недопустимого состояния. – paulosuzart 2008-11-28 12:37:23
Это зависит от того, где используется валидация и какая структура пользовательского интерфейса. Я не использую аспекты для объектов, которые должны быть проверены, но больше для «защитного кодирования». Я не использую проверку сущностей в методе сохранения в репозитории, но я проверяю где-то в пользовательском интерфейсе. – Paco 2008-11-28 19:50:29