бессмысленные интерфейсы
От: Codealot Земля  
Дата: 15.02.22 22:21
Оценка: +4 -2 :))
Некоторые люди делают для каждого класса по интерфейсу и фабрике чтобы создавать объекты, причем каждый интерфейс реализован ровно в одном классе.
В этом есть какой-то тайный смысл, или они просто идиоты?
Ад пуст, все бесы здесь.
Re: бессмысленные интерфейсы
От: Osaka  
Дата: 15.02.22 22:41
Оценка: +5 :)
C>Некоторые люди делают для каждого класса по интерфейсу и фабрике чтобы создавать объекты, причем каждый интерфейс реализован ровно в одном классе.
C>В этом есть какой-то тайный смысл, или они просто идиоты?
Они делают Как Положено, и чувствуют, как от этого увеличивается их социальный статус, и как им становится можно унижать тех кто не делает.
Re: бессмысленные интерфейсы
От: sambl74 Россия  
Дата: 16.02.22 04:24
Оценка:
Здравствуйте, Codealot, Вы писали:

C>В этом есть какой-то тайный смысл, или они просто идиоты?


KPI?
Re: бессмысленные интерфейсы
От: Слава  
Дата: 16.02.22 04:38
Оценка: +3 :)
Здравствуйте, Codealot, Вы писали:

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

C>В этом есть какой-то тайный смысл, или они просто идиоты?

Ну как же. Это для юнит-тестов делается, чтобы моки писать.
Re: бессмысленные интерфейсы
От: cppguard  
Дата: 16.02.22 04:42
Оценка: +3
Здравствуйте, Codealot, Вы писали:

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

C>В этом есть какой-то тайный смысл, или они просто идиоты?

  1. Тестирование. Mocking & stubbing.
  2. Dependency inversion.
Re[2]: бессмысленные интерфейсы
От: Codealot Земля  
Дата: 16.02.22 05:07
Оценка:
Здравствуйте, cppguard, Вы писали:

C>

    C>
  1. Тестирование. Mocking & stubbing.
    C>
  2. Dependency inversion.
    C>

Нет и нет.
Ад пуст, все бесы здесь.
Re[2]: бессмысленные интерфейсы
От: Codealot Земля  
Дата: 16.02.22 05:08
Оценка:
Здравствуйте, Слава, Вы писали:

С>Ну как же. Это для юнит-тестов делается, чтобы моки писать.


Так нет там никаких моков. Да и никаких тестов практически нет
Ад пуст, все бесы здесь.
Re[3]: бессмысленные интерфейсы
От: Слава  
Дата: 16.02.22 05:35
Оценка: +3 :)
Здравствуйте, Codealot, Вы писали:

С>>Ну как же. Это для юнит-тестов делается, чтобы моки писать.


C>Так нет там никаких моков. Да и никаких тестов практически нет


Это уже второй вопрос. ((с) см. изв. анекдот)
Re: бессмысленные интерфейсы
От: scf  
Дата: 16.02.22 05:39
Оценка:
Здравствуйте, Codealot, Вы писали:

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

C>В этом есть какой-то тайный смысл, или они просто идиоты?

От языка зависит. В Джаве это выглядит действительно странно, но если язык позволяет объявить интерфейс и реализацию в одном классе, то выделенный интерфейс — это хорошая практика.
В этом случае файл становится модулем, состоящим из интерфейса-контракта, описывающего его публичное API, документированного, не загроможденного реализацией, и реализации, изолированной от контракта.
Экземпляр такого интерфейса получают через фабричный метод, т.к. а) это завершает изоляцию интерфейса от реализации б) частенько бывает, что при создании экземпляра нужна какая-то асинхронная инициализация, а конструкторы всегда синхронные в) вынос кода инициализации и подготовки данных из конструктора в фабричный метод позволяет оформить реализацию иммутабельным классом, получающим все свои зависимости через конструктор.
Re[3]: бессмысленные интерфейсы
От: yenik  
Дата: 16.02.22 10:42
Оценка: :)
С>>Ну как же. Это для юнит-тестов делается, чтобы моки писать.

C>Так нет там никаких моков. Да и никаких тестов практически нет


Имелось в виду, что будут. Но потом. Но не срослось.
Re: бессмысленные интерфейсы
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 16.02.22 11:15
Оценка:
Здравствуйте, Codealot, Вы писали:

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

Индусы? Может количество кода увеличивают?
C>В этом есть какой-то тайный смысл
Это болезнь какая-то. Тоже столкнулся в работе с таким подходом где человек просто на всё создаёт интерфейс чтобы отвязаться от реализации или подсунуть МОК, правда у нас нет ни одного юнит теста и интерфейсы не используются, по сути, никогда.
Sic luceat lux!
Re[4]: бессмысленные интерфейсы
От: Codealot Земля  
Дата: 16.02.22 15:11
Оценка:
Здравствуйте, yenik, Вы писали:

Y>Имелось в виду, что будут. Но потом. Но не срослось.


YAGNI. Если понадобится — тогда и надо добавлять.
Ад пуст, все бесы здесь.
Re[2]: бессмысленные интерфейсы
От: Codealot Земля  
Дата: 16.02.22 15:12
Оценка:
Здравствуйте, scf, Вы писали:

scf>От языка зависит.


C#
Ад пуст, все бесы здесь.
Re[3]: бессмысленные интерфейсы
От: wl. Россия  
Дата: 16.02.22 15:54
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Здравствуйте, scf, Вы писали:


scf>>От языка зависит.


C>C#


я на котлине такое видел. Простенькая программы содержала в себе тысячи этих классов, интерфейсов и фабрик. Я нужный мне кусок кода (протокол работы с БТ) даже поиском по ключевым словам найти не сразу смог, всё упирался в какие-то пустые интерфейсы. А ведь это мобила, ресурсы стоило бы и поберечь, наверное
Re[4]: бессмысленные интерфейсы
От: Codealot Земля  
Дата: 16.02.22 17:22
Оценка:
Здравствуйте, wl., Вы писали:

wl.>Я нужный мне кусок кода (протокол работы с БТ) даже поиском по ключевым словам найти не сразу смог, всё упирался в какие-то пустые интерфейсы.


Тут примерно такая же фигня. По функционалу — всего лишь обертка над другой библиотекой.
Ад пуст, все бесы здесь.
Re[2]: бессмысленные интерфейсы
От: vsb Казахстан  
Дата: 17.02.22 05:42
Оценка: :))
Здравствуйте, scf, Вы писали:

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

C>>В этом есть какой-то тайный смысл, или они просто идиоты?

scf>От языка зависит. В Джаве это выглядит действительно странно, но если язык позволяет объявить интерфейс и реализацию в одном классе, то выделенный интерфейс — это хорошая практика.


Что за наезды на джаву?

public interface Calculator {
    int add(int a, int b);
    
    static Calculator create() {
        return new Impl();
    }
    
    class Impl implements Calculator {
        @Override
        public int add(int a, int b) {
            return 0;
        }
    }
}
Re[3]: бессмысленные интерфейсы
От: scf  
Дата: 17.02.22 06:15
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Что за наезды на джаву?


Вот так, спустя 20 лет программирования на джаве, узнаешь, что можно в интерфейсах объявлять вложенные классы.
Re[4]: бессмысленные интерфейсы
От: vsb Казахстан  
Дата: 17.02.22 11:10
Оценка:
Здравствуйте, scf, Вы писали:

vsb>>Что за наезды на джаву?


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


Не ручаюсь, что 20 лет назад это работало, возможно это в какой-то из последних версий добавили. private class почему-то нельзя так объявить...
Re: бессмысленные интерфейсы
От: B0FEE664  
Дата: 17.02.22 12:11
Оценка:
Здравствуйте, Codealot, Вы писали:

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

C>В этом есть какой-то тайный смысл, или они просто идиоты?

В конторе, где я сейчас работаю, прямо в правилах кодирования есть пункт запрещающий создавать интерфейс если его реализация будет ровно в одном классе. Причин не знаю.
И каждый день — без права на ошибку...
Re[2]: бессмысленные интерфейсы
От: AlexGin Беларусь  
Дата: 17.02.22 15:50
Оценка:
Здравствуйте, B0FEE664, Вы писали:

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


1) Если в качестве борьбы с перекрёстными ссылками?
2) Для представления древовидных структур, с коллекциями элементов того же типа, что и корневой элемент?
Когда в корневом элементе требуется иметь коллекцию child-элементов.

как тогда быть?

P.S. Подразумеваю C++ и наличие файлов *.h & *.cpp
Отредактировано 18.02.2022 5:07 AlexGin . Предыдущая версия . Еще …
Отредактировано 17.02.2022 15:57 AlexGin . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.