Определенно, Вариант 1.
Я бы также заменил термин «тупой» на «разделение интересов» в вашем мышлении.Нет никаких оснований для тупости хранилища.У него есть работа, и это будет включать исключения.
Это также будет включать в себя их выброс по двум причинам:
Чтобы упаковать реальную ошибку, которая произошла дляпотребляющий код.
Чтобы создать исключение при заданных условиях, которые нарушают то, что вы хотите, чтобы этот класс делал.Эти условия могут не включать исключение, создаваемое платформой, и могут быть связаны исключительно с «интеллектом», который должен иметь ваш репозиторий.
Репозиторий должен включать инкапсуляцию ВСЕХ этого интеллектаоставляя вызывающий код просто необходимо знать, как обращаться с ограниченным набором исключений.В противном случае ваш вызывающий код должен иметь дело, например, с полным набором исключений LINQ, связывая его с технологией, которая должна быть исключительной областью репозитория.
Таким образом, часть интеллекта репозитория должна бытьвыбрасывание хорошо известного, но ограниченного набора исключений, связанных с его конкретным назначением.
То же рассуждение применимо к уровню обслуживания, если он у вас есть.Он должен иметь дело с исключениями точно таким же образом: инкапсулировать «интеллект», который специфичен для его задачи.И снова то же самое происходит с контроллером.Он должен интерпретировать исключения, которые он получает от уровня обслуживания (если он есть), в соответствии с его собственными целями и задачами.
Таким образом, разделение интересов, но никогда не глупость.Даже не Mute: каждый слой должен визжать, когда это необходимо.