Короткий ответ - нет.
В шаблоне шаблона нет соглашения о том, какой тип и когда вызывать исключение.Такая информация включена в некоторый раздел документации в соответствии с MSDN.Используя комментарии на C # и XML, вы легко можете сгенерировать такую документацию.
У меня сложилось впечатление, что может существовать соглашение об именовании для самого шаблона шаблона без каких-либо ссылок на обработку исключений.Насколько я понимаю, наименование может выглядеть так:
public abstract class Widget
{
public void PerformAction()
{
this.PerformActionImpl();
}
protected virtual void PerformActionImpl(){}
}
Где Impl - это сокращение от "Внедрение".Лично мне не нравится этот стиль именования, так что не используйте его, но я уверен, что я читал его где-то наполовину авторитетно, так как это "единственный" способ сделать это.
Я бы не стал использоватьв любом случае, в любом случае это то, что вам действительно нужно для Factory или AbstractFactory.
..
Что касается вашего запроса на исключение, мне кажется, код являетсяЯ не согласен с некоторыми другими комментариями в зависимости от ваших обстоятельств.
Обтекание и бросание - полностью допустимая техника обработки исключений.
Дополнительный контекст, предоставляемый типом самого исключения, вполне может быть достаточным для направления исключения соответствующему обработчику.т. е. вы преобразовали исключение в WidgetException, которое, как можно ожидать, имеет контекст в вашем приложении.Так что это вполне может быть достаточно.
Где вы сделали обертывание, с которым я, однако, не согласен.
Я бы сделал перехват и выброс изнутри реализации подкласса виртуального метода, поскольку только у этого подкласса будет достаточно понимания того, что он делает, чтобы знать, действительно ли исключениеWidgetException и, следовательно, обернуть и выбросить или что-то более волосатое, что должно распространяться
Код в его нынешнем виде делает некоторые массивные предположения о причине исключения и в этом смысле делает любое использование пользовательского исключения рядом с бесполезным.т. е. теперь все является WidgetException.
Поэтому, хотя я считаю, что одних только типов достаточно для контекстуализации исключения, я не верю, что код принимает это решение в нужном месте.Я понимаю мотивацию реализации, которую вы выбрали, поскольку это выглядит как очень вкусный ярлык, «миф всезнающего базового класса», но сам факт того, что вы объявили его абстрактным, должен дать значительную подсказку, что класс предназначенбыть невежественным в дизайне.
Так что в отношении сквозной заботы об обработке исключений, я не думаю, что вам следует так много искать шаблон, который облегчит вашу жизнь, а скорее структуру, чтобы абстрагироваться от всего этого.,
Например, Библиотека предприятия.