Czytam Clean Code autorstwa Uncle Bob. Ponieważ nie jestem językiem ojczystym-angielskim, nie mogłem zrozumieć następującego oświadczenia:
Klasy i obiekty powinny mieć rzeczownik lub rzeczownik frazy nazwiska jak
Customer
,WikiPage
,Account
, iAddressParser
. Należy unikać takich słów jakManager
,Processor
,Data
, lubInfo
w imieniu klasy. Nazwa klasy nie powinna być czasownikiem.
Z tego co wiem, żaden z Manager
, Processor
, Data
i Info
to czasownik, prawda? Jaki jest faktyczny punkt, który chce podkreślić?
coding-style
terminology
code-quality
naming
mmdemirbas
źródło
źródło
Odpowiedzi:
Trzy punkty są osobne:
Nazwy klas powinny być rzeczownikami lub wyrażeniami rzeczownikowymi . Oznacza to, że nazwa klasy powinna być czymś, co byłoby przedmiotem czasownika. W przypadku projektowania obiektowego metodami byłyby czasowniki występujące na rzeczy, której klasa jest reprezentacją.
Niektórych słów należy unikać.
Manager
wskazuje na możliwą klasę boga .Info
iData
może wskazywać fikcyjny kontener danych. Takie słowa mogą wskazywać na złe modelowanie przestrzeni problemowej.Czasowniki nigdy nie powinny być nazwami klas. Zobacz pierwszy punkt - klasy modelują rzeczy, metody modelują działania.
źródło
Próbuje rozróżnić rzeczy (rzeczowniki) i działania (czasowniki). W tradycyjnym projektowaniu obiektowym myślimy o klasach jako przedmiotach, a ich metodach jako działaniach, które te rzeczy mogą wykonywać. Aby zarządzać ma zająć lub koordynować, a kierownik jest osobą lub rzeczą, którą zarządza.
Książki wprowadzające zwykle sprowadzają to do najprostszych i najbardziej oczywistych możliwych terminów, takich jak klasa o nazwie Dog , z metodami Bark and Bite . W klasach świata rzeczywistego rozróżnienie jest często nieco bardziej subtelne, ale nadal istnieje. Uważam jednak, że wujek Bob ma na myśli to, że chociaż menedżer jest rzeczownikiem, to jednak przywiązuje dużą wagę do tego, co robi menedżer, a nie do tego, co to jest - to zbyt niejasne słowo, by opisać dokładnie, co jest zarządzany lub jak.
źródło
Account
jest przedmiotem,balance
jest polem itransfer
jest metodą. Ale poprawny projekt brzmiałby:Transfer
jest przedmiotem,account
jest polem ibalance
jest metodą. Tak właśnie wdrażane są systemy bankowe i jak działała bankowość przed komputerami.