Що означає дядько Боб під «іменниковою фразою іменами»?


14

Я читаю Чистий код дядька Боба. Оскільки я не є носієм англійської мови, я не міг зрозуміти таке твердження:

Класи і об'єкти повинні мати іменник або словосполучення імена , як Customer, WikiPage, Accountі AddressParser. Уникайте таких слів , як Manager, Processor, Dataабо Infoв ім'я класу. Ім'я класу не повинно бути дієсловом.

Як я не знаю, жоден з Manager, Processor, Data, і Infoце дієслово, чи не так? Який фактичний момент він хоче підкреслити?


можливо, дядько Боб задумується з РЕШЕМИМИ мисленням у вихваленні чеснот ресурсів як об’єктів.
rwong

Відповіді:


21

Три пункти розділені:

  • Назви класів мають бути іменниками або іменниковими словосполученнями . Це означає, що назва класу повинна бути чимось, що було б предметом дієслова. У випадку об'єктно-орієнтованого проектування методами будуть дієслова, які мають місце у тому, що є представником класу.

  • Деякі слова слід уникати. Managerвказує на можливий клас бога . Infoі Dataможе вказувати на макетний контейнер даних. Такі слова можуть вказувати на слабке моделювання проблемного простору.

  • Дієслова ніколи не повинні бути назви класів. Дивіться перший пункт - класи моделюють речі, методи моделюють дії.


1
Такі слова можуть вказувати на слабке моделювання проблемного простору. - Ну, можна подумати, або проблемний простір моделюється погано, чи ні, незалежно від обраних імен. Гарне ім’я не допомагає поганому дизайну; а хороший дизайн лише незначно шкодить поганому імені.
Інго

І ви можете зробити це на крок нижче, розглядаючи, як ви насправді будуєте свій клас і як він взаємодіє із зовнішнім світом - властивості класу, як правило, будуть іменниками, тоді як методами класу зазвичай є дієслова
PeteH

Якщо у вашому проекті є клас, який ви могли б розглянути як "Менеджер" або "Інформація" або "Дані", то, ймовірно, є десяток таких класів, а це означає, що ви б не використовували ці імена. У вас би були ThisManager і ThatManager та AnotherManger тощо.
gnasher729

Він каже, що дієслова ніколи не повинні містити назви класів, але я просто читав додавання змістовного контексту, і у своєму прикладі на сторінці 29 він називає клас GuessStatisticMessage. Тепер я заплутався в правилі, тому що я трактую його вживання Guess як дієслово, а не іменник. dictionary.com/browse/guess?s=t
Девін Глісон Ламберт

2
@DevinGleasonLambert Але це не вгадайте. Це повідомлення про статистичні дані. Повідомлення - це іменник. Guess Statistic просто описує тип повідомлення, яке воно є - повідомлення про статистику здогадок.
Томас Оуенс

7

Він намагається розрізнити речі (іменники) та дії (дієслова). У звичайному об'єктно-орієнтованому дизайні ми вважаємо класи як речі, а їхні методи як дії, які ці речі можуть виконувати. Для того, щоб управляти , щоб піклуватися про координувати таку діяльність, в той час як менеджер це людина або річ , яка управляє.

Вступні книги зазвичай зводять це до найпростіших і очевидних термінів, таких як клас на ім'я Собака , методами Барк і Укус . У класах реального світу відмінність часто трохи тонкіша, але все ж є. Я вважаю, що справа дядька Боба полягає в тому, що, хоча менеджер є іменником, але він приділяє багато уваги тому, що робить менеджер, а не тому, що це таке - це занадто розпливчасте слово для опису того, що саме є керований чи як.


5
На жаль, такий спосіб мислення може призвести до неправильних конструкцій. Одним із головних прикладів є класичний вступний приклад банківського рахунку. Майже у всіх підручниках з ОО Accountє об'єктом, balanceполем і transferметодом. Але правильна конструкція була б: Transferє об’єктом, accountє полем і balanceє методом. Ось як насправді реалізуються банківські системи та як банківська справа працювала перед комп'ютерами.
Йорг W Міттаг

@ JörgWMittag: цю попереджувальну казку варто опублікувати як відповідь; що це загальні вказівки і можуть у певних рідкісних випадках призводити до поганого розкладання.
smci
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.