
Sergey
09.12.2016
10:54:19

Evgeniy
09.12.2016
10:54:33
если я его открыл значит можно юзать
и потом мне сложно модифицировать свой код

Aleh
09.12.2016
10:54:49
если статики юзать вместо именованных конструкторов, то вполне ок

Google

Evgeniy
09.12.2016
10:54:52
я открыл доступ к тому к чему не следовало

Aleh
09.12.2016
10:55:14
ты также можешь сказать, что конструктор потом менять плохо
или любой другой публичный метод
ну да
так и есть)

Evgeniy
09.12.2016
10:55:49
менять публичный метод плохо, но иногда можно
если профит от изменения перекрывает недостатки
поэтому прежде чем написать public надо подумать
вообще менять публичный метод не так плохо

Aleh
09.12.2016
10:56:24
недостатки это только боязнь изменения?

Evgeniy
09.12.2016
10:56:34
менять публичный метод интерфейса еще хуже
не боязнь а проблема в том что кто то мог юзать этот метод
и ему придется менять код

Google

Evgeniy
09.12.2016
10:58:01
а если окажется что после его модификаций он что то публичное уберет

Aleh
09.12.2016
10:58:05
ну поменяй, так бывает

Evgeniy
09.12.2016
10:58:08
это затронит других
и так цепочкой

Aleh
09.12.2016
10:58:23
короче таки боязнь

Evgeniy
09.12.2016
10:58:38
если у тебя кода на 1000 строк то проблем нет
тут не боязнь а скорее предостережение
без крайней необходимости не делать метод публичным
чем меньше публичных методов тем меньше тебе поддерживать

Aleh
09.12.2016
10:59:24
https://www.youtube.com/watch?v=9NANcPTbDBQ

Sergey
09.12.2016
10:59:27

Evgeniy
09.12.2016
10:59:27
чем меньше поддерживать тем меньше кода
речь не о конструторе

Sergey
09.12.2016
11:00:00
именованные конструкторы - один из вариантов использования статических функций

Evgeniy
09.12.2016
11:00:26
например

Sergey
09.12.2016
11:00:26
функции без зависимостей, чистые - тоже плохо?

Evgeniy
09.12.2016
11:00:30
публичный конструктор
без аргументов
через некоторое время понадобилось логировать
ты пишешь (LoggerInterface $logger)

Google

Evgeniy
09.12.2016
11:01:25
и теперь все места где объект создавался надо передавать logger
гораздо лучше чтобы LoggerInterface $logger = new NullLogger())
было бы
и там где надо логировать уже передавать нужное

Aleh
09.12.2016
11:02:15

Evgeniy
09.12.2016
11:02:18
я к тому что надо стараться максимально поддерживать свой код

Sergey
09.12.2016
11:02:19
ммм.. это щас к чему?

Evgeniy
09.12.2016
11:02:34
а если ты каждую неделю меняешь код

Sergey
09.12.2016
11:02:34
логировать именованные конструкторы или как?

Evgeniy
09.12.2016
11:02:40
от которого зависят другие люди
то как то не приятно
именнованные конструкторы это по сути теже фабрики
только они на основе разных вещей создают экземпляр
а речь шла о изменение публичных вещей, например тех же статичных методов, я говорю что не надо лишнего публичного делать, если в этом нет необходимости
в особенности в интерфейс

Sergey
09.12.2016
11:06:20
в интерфейс пихать статичекие сигнатуры?
это еще зачем?

Evgeniy
09.12.2016
11:06:48
getInstance для singleton местами вписывают

Sergey
09.12.2016
11:06:53
фабричные методы не люблю из за статических методов, которые доступны где угодно
мы за синглтоны сейчас не говорим

Google

Sergey
09.12.2016
11:07:48
речь идет конкретно о фабричных методах, а конкретно именованных конструкторах

Evgeniy
09.12.2016
11:08:26
хорошо давай детально

Sergey
09.12.2016
11:08:35
что мешает тебе сделать
new Date в любом месте?
точно так же и Date::createFromTime(..)
что в этом конкретно плохого для тебя?

Evgeniy
09.12.2016
11:09:08
я стараюсь те элементы что могут быть использованны в пакете

Sergey
09.12.2016
11:09:16
в пхп нет пакетов

Evgeniy
09.12.2016
11:09:20
другими участниками команды по возможности выносить в интерфейс
namespace

Sergey
09.12.2016
11:09:37
у тебя все сущности и DTO тоже с интерфейсами?

Evgeniy
09.12.2016
11:09:38
если раз уже речь о пхп

Sergey
09.12.2016
11:09:52
ограничений на неймспейсы нет как package-private в джаве
так что они не в счет

Evgeniy
09.12.2016
11:10:31
я сейчас говорю о той ситуации
когда люди создают кучу публичных штук и не скрывают это интерфейсом
я не против именнованных конструторов

Sergey
09.12.2016
11:11:18
зачем тебе скрывать под интерфейсом статику?

Aleh
09.12.2016
11:11:22
и причем здесь статические методы(конструкторы)

Evgeniy
09.12.2016
11:11:23
но когда они не уходят за пределы твоего namespace
или если это явно не необходимая вещь

Google

Evgeniy
09.12.2016
11:12:01
чтобы юзать за пределами по поводу dto нет конечно не везде интерфесы
я не только про скрывать под интерфейсом статику имею ввиду

Sergey
09.12.2016
11:12:47
мы вроде о статике говорили
тебя понесло в интерфейсы и связанность

Evgeniy
09.12.2016
11:13:02
я говорю следующее что лучше прежде чем написать public стоит хорошо подумать
и если есть возможность писать private

Sergey
09.12.2016
11:13:22
ок... приватный именованный конструтор?)
и где ты его использовать будешь?

Evgeniy
09.12.2016
11:13:38
возвращаясь к конструкторам
приватный именнованный конструктор это глупо
так как он бесполезен
я хочу сказать что в большинстве случаев достаточно одного конструтора!
потому что остальные варианты как будут создавать экземпляр этого класса
это не его проблема
его ответсвенность делать что полезное
и желательно только одно
а кому и как создавать этот класс это их проблема
потому что именнованные конструкторы они просто преобразуют данные передали им в формат понятный конструктору

Sergey
09.12.2016
11:17:23

Evgeniy
09.12.2016
11:17:36
давай пример
я предпочитаю использовать ContainerInterface
и он обычно есть только в App а уже объект создается на основе того что запросил в конструкторе