Ogólnie dobrze jest unikać słów takich jak „uchwyt” lub „proces” jako część rutynowych nazw i nazw klas, chyba że mamy do czynienia z (np.) Uchwytami plików lub (np.) Procesami unixowymi. Jednak klasy abstrakcyjne często nie wiedzą, co zamierzają z czymś zrobić, poza, powiedzmy, przetworzeniem. W mojej obecnej sytuacji mam „EmailProcessor”, który loguje się do skrzynki odbiorczej użytkownika i przetwarza z niej wiadomości. Nie jest dla mnie jasne, jak nadać temu bardziej precyzyjną nazwę, chociaż zauważyłem, że pojawia się następująca kwestia stylu:
- lepiej traktować klasy pochodne jako klientów i nazwać klasę podstawową częścią części, którą implementuje? Daje to więcej sensu, ale będzie naruszać is-a. Np. EmailAcquirer byłby rozsądną nazwą, ponieważ nabywa dla klasy pochodnej, ale klasa pochodna nie będzie pozyskiwać dla nikogo.
- Lub po prostu bardzo niejasne imię, ponieważ kto wie, co zrobią klasy pochodne. Jednak „Procesor” jest nadal zbyt ogólny, ponieważ wykonuje wiele istotnych operacji, takich jak logowanie i korzystanie z IMAP.
Jakiś sposób na wyjście z tego dylematu?
Problem jest bardziej widoczny w przypadku metod abstrakcyjnych, w których tak naprawdę nie można odpowiedzieć na pytanie „co to robi?” ponieważ odpowiedź brzmi: „cokolwiek klient chce”.