Використовуйте дієслова з функціями, іменники з класами - а як щодо інтерфейсів? [зачинено]


23

Гаразд, я розумію нормальні умовності використання дієслів з функціями та іменників з класами. Що з інтерфейсами? Чи існує якась методологія, коли придумуються імена інтерфейсів, які не можуть бути настільки очевидними?

Тільки для того, щоб було зрозуміло, я не говорю про те, чи потрібно ставити «я» перед іменем, чи використовувати камелю або паскаль. Мені цікаво про спосіб з'ясування чіткої, семантичної назви інтерфейсу.

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


2
Гм .. Виходячи з назви, я думав, що це стосуватиметься рівняння частин мови між програмуванням та англійською. У цьому випадку мадліби здаються можливими.
Ізката

Пам'ятайте, що коли ви створюєте клас, ви також створюєте інтерфейс для об'єктів, інстанційованих цим класом ... Або, якщо сказати інше, класи реалізуються інтерфейсами. Отже, вони повинні використовувати ту саму умову іменування.
Даніель Т.

Крім того, IMHO "використовувати дієслова з функціями" є занадто загальним. Слід використовувати дієслова з командами та іменники із запитами .
Даніель Т.

Відповіді:


21

Я б сказав, це залежить від того, що визначає інтерфейс. У деяких випадках, коли інтерфейс досить специфічний і детальний, я вважаю, що іменник найкращий. Прикладами є IList, ICollection.

Іноді, хоча інтерфейс більше стосується додавання певних загальних особливостей до класу. У такому випадку я вважаю, що прикметник найкращий. Прикладами можуть служити IDisposable, IEnumerable...

Можливо, ще один спосіб задуматися над тим, скільки «здібностей» визначає ваш інтерфейс.

Наприклад, IList<T>інтерфейс визначає ці здібності: Додати, Очистити, Містить, Вставити, Видалити ... Це все властивості списку, так що IListце добре ім'я.

IDisposableз іншого боку, визначає лише одну здатність: розпоряджатися. Тож він підходить для всього, що є одноразовим. Звідси і назва IDisposable.


10
Я б запропонував використовувати прикметник "_able", якщо ваш інтерфейс буде названий назви, які можна зробити вашому об'єкту (наприклад IEnumerable), іменник "_er", якщо ваш інтерфейс буде названий після того, як ваш об'єкт робить для інших об'єктів ( напр. IEqualityComparer), а також загальний іменник, якщо ваш інтерфейс названий за типом речі, поведінка якого він імітує (наприклад IList<T>).
supercat

Коментар @supercat справді повинен бути включений у цю відповідь. Це має багато сенсу.
Нікіл Вартак

Насправді префіксація імені інтерфейсу з Iнадмірною.
користувач1870400

5

Інтерфейс описує поведінку таким чином , імена повинні так сказати. Я не впевнений у правилі цього, але назву ви дізнаєтесь, коли почуєте.

Деякі приклади:

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

Я думаю, що не правильно називати інтерфейси Iта спілкуватися Setз ними, ISetоскільки, як розробник, ви не повинні турбуватися, чи це інтерфейс чи клас. Я бачу, що така практика зараз не існує на Java.


+1 для "як розробника, ви не повинні турбуватися про те, чи є його інтерфейс чи клас".
Казарк

"як розробника, ви не повинні турбуватися, чи це інтерфейс чи клас" - не погоджуйтесь, тому що якщо це інтерфейс, то вам потрібно знати, яких членів ви повинні реалізувати.
Максим Мінімус

@MaximusMinimus з префіксом це зайве, Iнезалежно. Тоді чому б не префікс абстрактних класів з A, регулярні заняття з Cтощо?
користувач1870400

@ user1870400 - правда, але це не частина, з якою я не згоден.
Максим Мінімус

4

Оскільки інтерфейс насправді є лише виразом типу "що", але не "як", я би назвав їх так само, як ви називаєте класи, принаймні з точки зору мови. Єдине, що я можу додати до цього, це те, що вони часто будуть більш загальними, ніж конкретні реалізатори (наприклад, інтерфейс "Клієнт" може мати реалізатори "ProspectiveCustomer" та "PayingCustomer").


0

Інтерфейс використовується як клас. Тому його також слід називати іменником, коли ви називаєте класи з іменниками. Віддайте перевагу абстрактним іменникам, наприклад "Транспортний засіб", коли класи - "Автомобіль" та "Вантажівка".


0

Швидка відповідь: Інтерфейс більше про додавання SET здібностей, особливостей, спільних кордонів або взаємозв'язків між сутностями, класи, моделі, концепціями і т.п. ..

Що стосується додавання загальної поведінки до класів та сутностей, а потім з’явиться хороша змістовна назва, щоб визначити набір реалізованих функцій.

Найменування інтерфейсу типу: IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.можливо, поясніть концепцію.


1
Так, інтерфейси представляють договори чи можливості; так багато добре відомо. Але як це відповідає на питання, як їх назвати? Все, що ви насправді говорите в цьому плані, - це "подумайте, і натхнення вас вразить". Наприклад, це не дає жодних рекомендацій, яке з наступних імен слід обрати, чому б це не було: IStateMachineBuilder(іменник), IBuildStateMachine(названий після дії), ICanBuildStateMachine(названий по можливості) тощо
stakx

0

Залежить, якщо інтерфейс містить лише методи, було б добре назвати його за допомогою дієслів на зразок "Дії", де ніби він являє собою загальний клас, який містить статичні, заключні поля, тоді ми можемо використовувати загальний іменник так само, як "Транспортний засіб"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.