Как поместить предварительное условие для метода Invoke
в следующем интерфейсе, утверждая, что объект, обозначенный ObjectId
, должен существовать?:
interface IDeleteObjectCommand {
Guid ObjectId { get; }
void Invoke();
}
Попытка # 1
У меня уже есть команда с именем IObjectExistsCommand
, с помощью которой можно определить, существуют ли объекты.Эти команды могут быть созданы с помощью IObjectExistsCommandFactory
.Я думал о том, чтобы сделать следующее, но это добавляет нежелательный шум в интерфейс команды (IMO):
interface IDeleteObjectCommand {
IObjectExistsCommandFactory ObjectExistsCommandFactory { get; }
Guid ObjectId { get; }
// Contract.Requires(ObjectExistsCommandFactory.Create(ObjectId).Invoke());
void Invoke();
}
Попытка # 2
Аналогично выше, за исключениемиспользуйте ServiceLocator
.Нежелательно по понятным причинам, но оно чище:
interface IDeleteObjectCommand {
Guid ObjectId { get; }
// Contract.Requires(ServiceLocator.Get<ObjectExistsCommandFactory>().Create(ObjectId).Invoke());
void Invoke();
}
РЕДАКТИРОВАТЬ: Аналогично, как бы вы определили постусловия для внешнего состояния?Т.е. говоря, что этот метод приводит к существованию нового файла.