Суффикс для интерфейсов

Обсуждаем разработку фреймворка: дизайн компонентов, API, пакеты

Какое именование интерфейсов вам нравится больше?

NameInterface. С суффиксом
23
88%
Без суффикса
3
12%
 
Всего голосов: 26

skynin
Сообщения: 186
Зарегистрирован: 2017.12.12, 10:09

Re: Суффикс для интерфейсов

Сообщение skynin » 2019.07.10, 18:29

Nex-Otaku писал(а):
2019.07.08, 12:34
skynin писал(а):
2019.07.07, 14:41
но, приходится читать в коде
instanceof SomeEntity

и гадать, если одинаковые названия
так что проверяем то - класс или интерфейс?
Зачем гадать? Какая разница, что там? Какое это может иметь значение? Можешь описать ситуацию, в которой твои дальнейшие после "гаданий" действия различаются, в зависимости от того, класс это или интерфейс?
Могу, вполне обычная ситуация - реализация? аха, значит я могу дернуть ее паблик метод, которого нет в интерфейсе!
и для этого мне не надо начинать дергать, чтобы автокомплит сказал - ась? нет такого в метода в интерфейсе.
Nex-Otaku писал(а):
2019.07.08, 12:34
skynin писал(а):
2019.07.07, 14:41
тот же вопрос с указанием типа в параметрах метода
скролить вверх, смотреть какой use?
Тот же вопрос. Какое дело разработчику, класс обозначается или интерфейс? Ему важно лишь, что тип объекта соответствует ожидаемому. Есть такой-то тип, он даёт нам возможность пользоваться такими-то методами и ожидать такого-то поведения. Согласованная абстракция.
Абстракции - текут.

А разработчику важно написать код - вовремя.

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

потому что - расширение интерфейса надо согласовывать, замена на объект - невозможна, и т.п.

поэтому - Какое дело разработчику,
вообще звучит странно. а чем еще разработчику заниматься как не делать свою работу?
Nex-Otaku писал(а):
2019.07.08, 12:34
skynin писал(а):
2019.07.07, 14:41
3. Но раз написано Interfaces MUST be suffixed by Interface: e.g. Psr\Foo\BarInterface то и ладно, пункт 1 соблюден
Это написано в PSR для стиля ДОКУМЕНТАЦИИ, а не кода. К сожалению, немногие видят различие, как и показывают комментарии в этом топике.
А код должен быть - самодокументируемым.
в идеале конечно :)

так что - если вам не нужно видеть сразу, это интерфейс или класс в типе указан - то мне - всегда нужно.

потому что - гадание раздражает. отвлекание внимания - раздражает. спрятанные смыслы - раздражают.

а так у меня - более полная информация.
И вот тут да
кому какое дело как я ей воспользуюсь.
Вы предоставьте, а не прячьте ее от меня.
Неврубающийся не может опознать врубающегося.

Аватара пользователя
chungachguk
Сообщения: 425
Зарегистрирован: 2012.07.17, 11:52

Re: Суффикс для интерфейсов

Сообщение chungachguk » 2019.07.10, 19:14

Что-то вас не туда заносит. Вот тут ребятишки суффикс не используют https://github.com/libgdx/libgdx/blob/m ... n.java#L97

Loveorigami
Сообщения: 974
Зарегистрирован: 2014.08.27, 21:54

Re: Суффикс для интерфейсов

Сообщение Loveorigami » 2019.07.10, 19:36

chungachguk писал(а):
2019.07.10, 19:14
Что-то вас не туда заносит. Вот тут ребятишки суффикс не используют https://github.com/libgdx/libgdx/blob/m ... n.java#L97
1. Это не php
2. Там же - CustomActionInterface https://github.com/libgdx/libgdx/blob/a ... rface.java
3. И там же - много других - https://github.com/libgdx/libgdx/search ... +interface

Вы как будто предыдущий мой пост не читали. Я напротив приводил пример - В laravel тоже нет суффиксов, так как все интерфейсы собраны в одном каталоге и кроме них там ничего нет. И вполне логично - названия не снабжать суффиксом.
https://github.com/laravel/framework/tr ... /Contracts

Насколько удобно ими пользоваться вне рамок laravel-core в своих модулях - это уже отдельный вопрос...

Аватара пользователя
chungachguk
Сообщения: 425
Зарегистрирован: 2012.07.17, 11:52

Re: Суффикс для интерфейсов

Сообщение chungachguk » 2019.07.10, 19:52

Loveorigami писал(а):
2019.07.10, 19:36
chungachguk писал(а):
2019.07.10, 19:14
Что-то вас не туда заносит. Вот тут ребятишки суффикс не используют https://github.com/libgdx/libgdx/blob/m ... n.java#L97
1. Это не php
2. Там же - CustomActionInterface https://github.com/libgdx/libgdx/blob/a ... rface.java
3. И там же - много других - https://github.com/libgdx/libgdx/search ... +interface
Не php, но тут упоминали java. Я лишь акцентирую внимание на том, что сейчас приводится примеры не в кассу. То IDE не так ищет, то контейнер не так читается, забывая о том, для чего вообще нужны интерфейсы.

skynin
Сообщения: 186
Зарегистрирован: 2017.12.12, 10:09

Re: Суффикс для интерфейсов

Сообщение skynin » 2019.07.10, 20:47

-- Не php, но тут упоминали java
причем я привел пример "неправильный". унылого кода, когда наспех выдернули интерфейс, и т.п.

исправляюсь, все таки речь о фреймворке, а не об обычном коде.

по правильному в Джаве ни префиксов ни суффиксов не используют.
Можно в системную библиотеку посмотреть.

Принцип - название интерфейса однословное, очень лаконичное, обобщенное
А реализаций - в несколько слов, или конретизированное.

то есть НЕсовпадение соблюдается.
И программист на Джава видя объявление List - точно знает что это - интерфейс.
(собеседования на Джаву суровые - там гоняют вопросами по системной библиотеке - на память. по коллекциям так точно
ответ - понадобится: загляну в доку не принимается)

Главное ж - чтобы было сразу понятно что это: интерфейс или класс, без загладывания в секцию use

И если кому понадобится, а фантазии нету, то он сделает реализацию
ListImpl
или
SkyninList, MySuperList

суффикс Impl вот от этого берется в обычном, унылом, "индусском" коде

Нагуглил, копипаст:

Java Interfaces/Implementation naming convention

When this happens I usually name the interface in the "normal" name, like Truck and name the actual class TruckClass.

Name your Interface what it is. Truck. Not ITruck because it isn't an ITruck it is a Truck.

An Interface in Java is a Type. Then you have DumpTruck, TransferTruck, WreckerTruck, CementTruck, etc that implement Truck.


When you are using the Interface in place of a sub-class you just cast it to Truck. As in List<Truck>. Putting I in front is just Hungarian style notation tautology that adds nothing but more stuff to type to your code.

All modern Java IDE's mark Interfaces and Implementations and what not without this silly notation. Don't call it TruckClass that is tautology just as bad as the IInterface tautology.

If it is an implementation it is a class. The only real exception to this rule, and there are always exceptions, could be something like AbstractTruck. Since only the sub-classes will ever see this and you should never cast to an Abstract class it does add some information that the class is abstract and to how it should be used. You could still come up with a better name than AbstractTruck and use BaseTruck or DefaultTruck instead since the abstract is in the definition. But since Abstract classes should never be part of any public facing interface I believe it is an acceptable exception to the rule. Making the constructors protected goes a long way to crossing this divide.

And the Impl suffix is just more noise as well. More tautology. Anything that isn't an interface is an implementation, even abstract classes which are partial implementations. Are you going to put that silly Impl suffix on every name of every Class?

The Interface is a contract on what the public methods and properties have to support, it is also Type information as well. Everything that implements Truck is a Type of Truck.

Look to the Java standard library itself. Do you see IList, ArrayListImpl, LinkedListImpl? No, you see List and ArrayList, and LinkedList. Here is a nice article about this exact question. Any of these silly prefix/suffix naming conventions all violate the DRY principle as well.

Also, if you find yourself adding DTO, JDO, BEAN or other silly repetitive suffixes to objects then they probably belong in a package instead of all those suffixes. Properly packaged namespaces are self documenting and reduce all the useless redundant information in these really poorly conceived proprietary naming schemes that most places don't even internally adhere to in a consistent manner.

If all you can come up with to make your Class name unique is suffixing it with Impl, then you need to rethink having an Interface at all. So when you have a situation where you have an Interface and a single Implementation that is not uniquely specialized from the Interface you probably don't need the Interface.

https://stackoverflow.com/questions/281 ... on/2814831
Неврубающийся не может опознать врубающегося.

Аватара пользователя
ElisDN
Сообщения: 5401
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Суффикс для интерфейсов

Сообщение ElisDN » 2019.07.11, 02:39

Для кода самого своего проекта удобно и без суффиксов. На это идёшь осознанно по своему опыту, знаешь домен и скилы команды и как тру-архитектор можешь раскладывать код как угодно.

Для публичных же библиотек и фреймворков планка ментальных требований вроде require "mind-IQ:>=100" понижается, так как с парой тру-архитекторов с IDE налетят тысячи новичков с Notepad+. Здесь всё желательно с суффиксами, чтобы действительно всем, а не только избранным было понятно, что где лежит.

Аватара пользователя
chungachguk
Сообщения: 425
Зарегистрирован: 2012.07.17, 11:52

Re: Суффикс для интерфейсов

Сообщение chungachguk » 2019.07.11, 05:08

ElisDN писал(а):
2019.07.11, 02:39
Для кода самого своего проекта удобно и без суффиксов. На это идёшь осознанно по своему опыту, знаешь домен и скилы команды и как тру-архитектор можешь раскладывать код как угодно.

Для публичных же библиотек и фреймворков планка ментальных требований вроде require "mind-IQ:>=100" понижается, так как с парой тру-архитекторов с IDE налетят тысячи новичков с Notepad+. Здесь всё желательно с суффиксами, чтобы действительно всем, а не только избранным было понятно, что где лежит.
По мне, так для публичных библиотек требования только в хорошей документации API и поддержка соглашений того языка, на котором они написаны. Если решило сообщество использовать префикс/суффикс, значит так и будет, если нет, то прекрасно. А то, что новичкам сложно разобраться со структурой проекта с помощью notepad++ вообще не аргумент. Раньше я с этим бы ещё согласился (сам начинал с блокнота), но сейчас когда есть как минимум всякие sublime с visualcod'ами это должно быть не такой уж и проблемой.

anton_z
Сообщения: 436
Зарегистрирован: 2017.01.15, 15:01

Re: Суффикс для интерфейсов

Сообщение anton_z » 2019.07.20, 00:41

За суффиксы, либо за наименование из которого понятно, что это интерфейс, например Serializable. Ни на какую инкапсуляцию это не влияет, чисто вопрос удобства.

Ответить