В общем, хорошо избегать таких слов, как «handle» или «process», как части имен рутины и имен классов, если вы не имеете дело с (например) дескрипторами файлов или (например) процессами unix. Однако абстрактные классы часто не знают, что они собираются делать с чем-то, кроме, скажем, обработки. В моей текущей ситуации у меня есть «EmailProcessor», который входит в почтовый ящик пользователя и обрабатывает сообщения от него. Мне не совсем понятно, как дать этому более точное имя, хотя я заметил, что возникает следующий вопрос стиля:
- лучше относиться к производным классам как к клиентам и называть базовый класс частью той функциональности, которую он реализует? Придает ему больше смысла, но нарушит его. Например, EmailAcquirer будет разумным именем, так как он получает для производного класса, но производный класс не будет получать для кого-либо.
- Или просто смутное имя, так как кто знает, что будут делать производные классы. Однако «Процессор» все еще слишком общий, поскольку он выполняет много соответствующих операций, таких как вход в систему и использование IMAP.
Есть ли выход из этой дилеммы?
Проблема более очевидна для абстрактных методов, в которых вы не можете действительно ответить на вопрос "что это делает?" потому что ответ просто «все, что хочет клиент».