мне сегодня пришло письмо — предлагали рассылку на полмильена адресов недорого, быстро, качественно
ну на самом деле не по этому примеру, а по опыту, причем не только по своему, но и эванса, фаулера, мартина и других.
выпилить легко. пока код не засорен ненужными зависимостями и вообще не сгнил:)
Вот считай тдд — средство держать код в тонусе.
BTW эклипс разве не моветон сейчас в джава разработке?
естественно может быть. Но вероятность развалится более органичной модели — меньше. Например, при вышибании двери дверь все еще нужна, а ручка уже нет:)
нет конечно. Это аналогично матрешке — естественнее связь между матрешками соседних размеров, чем через 1.
комната и не знает. Робот только для тебя, чтобы не смущала комната, открывающая дверь, как пример. Но если бы актор имел значение в моделе, то да, был бы какой-то опенер.
используя интерфейс двери «открыть»:) детали уже будут скрыты. Может и с ноги, может и ручкой, может ментальным сигналом.
а потом запилить:)
в моем примере комната принимает команду проветриться, и открывает для этого дверь:) реальный актор в такой модели не так важен. Можешь считать его роботом, который часть комнаты и открывает дверь, если тебе так проще.
И из-за неправильно привязки к ручке, получаешь проблему в будущем.
Не будет зависимости когда, через год или в момент 0?по окончании текущих действий над тестами/кодом. Очевидно из комнаты.
«комната имеющая зависимость от ручки» хуже «комната имеющая зависимость от двери»
В конце у меня не будет зависимости от ручки, тесты приведут к изменению интерфейса двери. Хотя как промежуточный этап возможна и инъекция ручки, в поиске оптимального. Но будет отвергнута.
Ну в абстракции должна быть логика. Т.е. Комната зависящяя от двери все же лучше, чем от ручки.
Я это и не буду пытаться предвидеть. У меня просто будет меньше зависимостей либо они будут более органично вписываться в модель. Соответственно меньше вероятность устаревания итд
Сам подумай — «комната зависит от ручки» даже звучит плохо. А тесты покажут это
Да и я написал, что во что инжектится и какие могут быть проблемы от этого. Плохой подход сразу инжектить новый объект и я объяснил почему. И показал как тдд помогает этого избежать.
А я где-то писал что не использую di? Это ты так решил. Ну Ок. А я решил, что ты не знаешь, что такое тдд.
От не использования тдд проблем еще больше. А я предпочту и то и то.
нифига не юзаешь DIну понятно, куда уж мне. Ну что ж — удачи с заинжекшеной ручкой. Я вверху писал последствия такого хода. Я предпочту писать качественный и гибкий код.
Ну так в изначальном варианте есть нарушение закона Деметры, о чем мне скажут тесты (мок, возвращающий мок) и я уйду от него. Попробую внедрить ручку, получу тест вида
Ручка = создать мок ручки с ожиданиями вызовов
Комната = new Комната(Ручка)
....
Попробую прочитать тест и сразу пойму неправильность действий, поменяю интерфейс двери и перепишу тест, сделав его читабельным, основной код менее связным и с более естественными зависимостями.
Ну прекрасно — нужна ручка — мы получили комнату зависящую от ручки. Через год дверь стала стала с дистанционным управлением, а комната зависит от ручки. Куча лишней работы по удалению изначально не нужной зависимости. Ну а так как дело происходит через год, код открытия переделали, а зависимость от ручки осталась. Потому, что кто-то посмотрел, что уже ручка есть и решил что-то при помощи нее сделать. Или просто забыли. Ну а так как код состоит из гараздо большего количества объектов....
Я об этом и говорил. Ты же сказал инжектить все что инжектится и пришел к зависимости комнаты от ручки:) С другой стороны есть случаи когда таки надо инжектить. И чтобы отличать одно от другого и нужны тесты. Например, если будет инжектится ручка тест станет плохо читаемым.
Ну например, в комнату заинекшена дверь и у комнаты есть метод проветрить, которому в качестве одного из шагов нужно открыть дверь. Чтобы открыть дверь надо потянуть ручку.
Ты же не агитируешь за иньъекцию всех возможных сервисов во все объекты, в которые возможно?
Это ты уже додумал о каких-то «народных» способах и приписал это мне.
я юзаю айдею в линукс (правда кде) вроде все ок со шрифтами. Может привык