У меня есть сценарий, когда я обрабатываю очередь MailItems. Как только я обработал каждый MailItem, мне нужно обновить состояние MailItem. Логика обновления статуса довольно сложная. Я думаю, что мне не следует инкапсулировать саму логику внутри класса MailItem, а вместо этого инкапсулировать ее в отдельный класс для упрощения обслуживания в будущем.
Поэтому мой вопрос, каков наилучший способ сделать это?
Я рассмотрел шаблон спецификации. Мое исследование этого шаблона состоит в том, что он зависит от интерфейса ISpecification, определенного следующим образом:
public interface ISpecification<T>
{
bool IsSatisfiedBy(T candidate);
}
Моя проблема в том, что на мою логику в данном конкретном случае влияет не только внутреннее состояние объекта-кандидата, но и внешнее значение, которое мне нужно передать для рассмотрения в логике.
Итак, моя подпись метода на MailItem должна выглядеть примерно так:
public void ChangeStatus(bool mailSentSuccessfully)
Стандартный интерфейс ISpecification не предназначен для передачи внешнего значения. Должен ли я просто «согнуть» стандартную реализацию или это нарушит «правила» определения шаблона? Если это не ответ, на какие другие варианты, основанные на шаблонах, я могу посмотреть?