Я пишу службу аудита для некоторых важных для бизнеса операций. Услуга реализуется с использованием шаблона IoC:
public interface IAuditWriter
{
void WriteAction(int key, string value);
}
Из-за этого мне нужно вызывать исключения, которые не являются специфическими для реализации.
Часть информации в процессе аудита включает ключ, который должен быть уникальным. В настоящее время служба требует, чтобы она обеспечивала проверку уникальности ключа в рамках процесса аудита. Дубликаты ключей являются нарушением требований процесса.
В настоящее время сервис должен быть реализован как запись на SQL-сервер. Хотя маловероятно, что ключ может быть дубликатом, в этом случае будет выдан SqlException
с жалобой на нарушение ограничения первичного ключа. Я бы предпочел заключить это исключение в более общее исключение «дубликат ключа», которое можно перехватить, а затем разрешить процессу генерировать новый ключ.
Обычно я ненавижу создавать новый класс исключений; почти всегда есть подходящий тип, который можно использовать для передачи одной и той же информации. Я поймал System.Data.Linq.DuplicateKeyException
в прошлом, который выглядел как хороший кандидат для броска, за исключением того, что он происходит из пространства имен, связанного с LINQ, и мой интерфейс не имеет ничего общего с LINQ.
Мои ближайшие варианты:
- бросить
System.Data.Linq.DuplicateKeyException
в любом случае и надеяться, что никто не прочитает слишком много в пространство имен.
- Бросьте
System.InvalidOperationException
и скрестите пальцы Мне никогда не нужна реализация, которая может вызвать это исключение по другим причинам.
- Бросай свой кастом
DuplicateKeyException
.
- Создайте в интерфейсе отдельный метод для проверки уникальности ключа и вызовите его, прежде чем я напишу ключ и значение.
Что вы думаете по этому поводу?