Некоторые люди делают для каждого класса по интерфейсу и фабрике чтобы создавать объекты, причем каждый интерфейс реализован ровно в одном классе.
В этом есть какой-то тайный смысл, или они просто идиоты?
C>Некоторые люди делают для каждого класса по интерфейсу и фабрике чтобы создавать объекты, причем каждый интерфейс реализован ровно в одном классе. C>В этом есть какой-то тайный смысл, или они просто идиоты?
Они делают Как Положено, и чувствуют, как от этого увеличивается их социальный статус, и как им становится можно унижать тех кто не делает.
Здравствуйте, Codealot, Вы писали:
C>Некоторые люди делают для каждого класса по интерфейсу и фабрике чтобы создавать объекты, причем каждый интерфейс реализован ровно в одном классе. C>В этом есть какой-то тайный смысл, или они просто идиоты?
Ну как же. Это для юнит-тестов делается, чтобы моки писать.
Здравствуйте, Codealot, Вы писали:
C>Некоторые люди делают для каждого класса по интерфейсу и фабрике чтобы создавать объекты, причем каждый интерфейс реализован ровно в одном классе. C>В этом есть какой-то тайный смысл, или они просто идиоты?
Здравствуйте, Codealot, Вы писали:
С>>Ну как же. Это для юнит-тестов делается, чтобы моки писать.
C>Так нет там никаких моков. Да и никаких тестов практически нет
Здравствуйте, Codealot, Вы писали:
C>Некоторые люди делают для каждого класса по интерфейсу и фабрике чтобы создавать объекты, причем каждый интерфейс реализован ровно в одном классе. C>В этом есть какой-то тайный смысл, или они просто идиоты?
От языка зависит. В Джаве это выглядит действительно странно, но если язык позволяет объявить интерфейс и реализацию в одном классе, то выделенный интерфейс — это хорошая практика.
В этом случае файл становится модулем, состоящим из интерфейса-контракта, описывающего его публичное API, документированного, не загроможденного реализацией, и реализации, изолированной от контракта.
Экземпляр такого интерфейса получают через фабричный метод, т.к. а) это завершает изоляцию интерфейса от реализации б) частенько бывает, что при создании экземпляра нужна какая-то асинхронная инициализация, а конструкторы всегда синхронные в) вынос кода инициализации и подготовки данных из конструктора в фабричный метод позволяет оформить реализацию иммутабельным классом, получающим все свои зависимости через конструктор.
Здравствуйте, Codealot, Вы писали:
C>Некоторые люди делают для каждого класса по интерфейсу и фабрике чтобы создавать объекты, причем каждый интерфейс реализован ровно в одном классе.
Индусы? Может количество кода увеличивают? C>В этом есть какой-то тайный смысл
Это болезнь какая-то. Тоже столкнулся в работе с таким подходом где человек просто на всё создаёт интерфейс чтобы отвязаться от реализации или подсунуть МОК, правда у нас нет ни одного юнит теста и интерфейсы не используются, по сути, никогда.
Здравствуйте, Codealot, Вы писали:
C>Здравствуйте, scf, Вы писали:
scf>>От языка зависит.
C>C#
я на котлине такое видел. Простенькая программы содержала в себе тысячи этих классов, интерфейсов и фабрик. Я нужный мне кусок кода (протокол работы с БТ) даже поиском по ключевым словам найти не сразу смог, всё упирался в какие-то пустые интерфейсы. А ведь это мобила, ресурсы стоило бы и поберечь, наверное
Здравствуйте, wl., Вы писали:
wl.>Я нужный мне кусок кода (протокол работы с БТ) даже поиском по ключевым словам найти не сразу смог, всё упирался в какие-то пустые интерфейсы.
Тут примерно такая же фигня. По функционалу — всего лишь обертка над другой библиотекой.
Здравствуйте, 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;
}
}
}
Здравствуйте, scf, Вы писали:
vsb>>Что за наезды на джаву?
scf>Вот так, спустя 20 лет программирования на джаве, узнаешь, что можно в интерфейсах объявлять вложенные классы.
Не ручаюсь, что 20 лет назад это работало, возможно это в какой-то из последних версий добавили. private class почему-то нельзя так объявить...
Здравствуйте, Codealot, Вы писали:
C>Некоторые люди делают для каждого класса по интерфейсу и фабрике чтобы создавать объекты, причем каждый интерфейс реализован ровно в одном классе. C>В этом есть какой-то тайный смысл, или они просто идиоты?
В конторе, где я сейчас работаю, прямо в правилах кодирования есть пункт запрещающий создавать интерфейс если его реализация будет ровно в одном классе. Причин не знаю.
Здравствуйте, B0FEE664, Вы писали:
BFE>В конторе, где я сейчас работаю, прямо в правилах кодирования есть пункт запрещающий создавать интерфейс если его реализация будет ровно в одном классе. Причин не знаю.
1) Если в качестве борьбы с перекрёстными ссылками?
2) Для представления древовидных структур, с коллекциями элементов того же типа, что и корневой элемент?
Когда в корневом элементе требуется иметь коллекцию child-элементов.
как тогда быть?
P.S. Подразумеваю C++ и наличие файлов *.h & *.cpp