Я сталкивался с шаблоном проектирования, который упоминался как «Шаблон обработчика», но я нигде не могу найти никаких реальных ссылок на этот шаблон. По сути, это всего лишь интерфейс с одним методом, который позволяет легко расширять функциональность на серверной части без перекомпиляции клиентов. Может быть полезно для веб-службы, которая должна обрабатывать различные типы запросов. Вот пример:
public interface IHandler
{
IDictionary<string, string> Handle(IDictionary<string, string> args);
}
Аргументы обычно включают в себя один ключ, такой как «Действие», со значением, которое указывает имплментации, что делать. Дополнительные аргументы могут быть переданы, чтобы дать impl больше информации. Затем impl возвращает произвольный список аргументов, которые клиент «должен» понять.
Это анти-паттерн или, может быть, другой замаскированный паттерн? Рекомендуется ли этот тип дизайна?
EDIT:
Немного больше информации: способ, которым я видел это реализованным, «корневой» обработчик будет действовать как диспетчер для других конкретных обработчиков (может быть?). Корневой обработчик имеет «HandlerResolver», который решает, какой конкретный обработчик должен получить сообщение, основываясь на его содержимом. Может быть, это на самом деле как «диспетчерский» паттерн, хотя я тоже не знаю, действительно ли это паттерн. Я предполагаю, что в корне также может быть шаблон цепочки ответственности, который позволяет вам связать воедино кучу конкретных обработчиков, а затем позволить им решить, какой из них будет обрабатывать.