
Sergey
23.11.2016
18:53:45
с тестами, парным программированием, с анализом цикла обратной связи

Roman
23.11.2016
18:54:10
Это был сарказм в общем

Sergey
23.11.2016
18:54:18
хочешь острых ощущений - пиши на глобальных переменных

Roman
23.11.2016
18:54:20
Про экстремальное программирование

Google

Sergey
23.11.2016
18:54:31
и убери тайп хинтинг
что б совсем интересно стало
давай пример конкретный. Наверняка у тебя описанные тобой ситуации были

Roman
23.11.2016
19:07:24
Да вот не было пока. Я только представляю, что будет все хреново. Те три чувака, ведут свои проекты, в которых они веселятся во всю. Мне сказали, выбери один проект, что тебе больше всего нравится, и отрефактори его так, чтобы он был общим для всех. И я сижу, и чёто делаю.
Вернемся к нотификациям, которые более реальны. Я написал интерфейс, у которого надо реализовать метод send, и getResponse. Потом есть классы, VkNotification, FbNotification. В них идет уже реализация этого send и getResponse. Потом идет уже фабрика, которая дает нам то что надо.
Потом, всё тот же Вася, в своем проекте, заюзал мою фабрику. Но говорит, у тебя getResponse, возвращает только статус. А мне надо еще user_id там например, и notification_id. И что ему надо сделать в данном случае?

Sergey
23.11.2016
19:08:42
что send принимает в качестве аргументов?
и зачем getResponse

Roman
23.11.2016
19:09:18
Как ему изменить VkNotification к примеру, чтобы getResponse возвращал больше параметров, чем определил я?


Sergey
23.11.2016
19:09:41
ты лучше расскажи зачем вообще сервису нотификаций какой-то там getResponse?
и опять же, почему мы говорим о конкретном классе, если у тебя есть интерфейсы?
p.s. я серьезно потому что я не знаю о каких нотификациях идет речь
ну мол меня интересует абстрактная задача, мол "ну нужна штука которая нотификации шлет"
весь вопрос что у тебя в интерфейсе Notification
Да вот не было пока. Я только представляю, что будет все хреново. Те три чувака, ведут свои проекты, в которых они веселятся во всю. Мне сказали, выбери один проект, что тебе больше всего нравится, и отрефактори его так, чтобы он был общим для всех. И я сижу, и чёто делаю.
Вернемся к нотификациям, которые более реальны. Я написал интерфейс, у которого надо реализовать метод send, и getResponse. Потом есть классы, VkNotification, FbNotification. В них идет уже реализация этого send и getResponse. Потом идет уже фабрика, которая дает нам то что надо.
Потом, всё тот же Вася, в своем проекте, заюзал мою фабрику. Но говорит, у тебя getResponse, возвращает только статус. А мне надо еще user_id там например, и notification_id. И что ему надо сделать в данном случае?
в этом случае я могу тебе сказать, что это два абсолютно разных сервиса с разными интерфейсами. Раз у тебя они разные штуки возвращают в зависимости от реализации

Google

Sergey
23.11.2016
19:16:26
ну мол если у тебя не выходит один севрси заменить другим не переписывания ни строчки кода - значит абстракцию выделить не выйдет
ну мол заменить VkNotificator на FbNotificator

Roman
23.11.2016
19:19:04
Да, getResponse там нахрен не надо. Вечером я превращаюсь в wordpress разработчика.
Ок, объясняю более конкретно. Теперь уже будет так. Интерфейс содержит только send. Реализация send, отправляется запрос на апи соцсети, чтобы соцсеть отправила нотификацию пользователю, зайди в нашу игру. Апи возвращает инфу какую-то, о том, прошло все успешно, или нет. И я возвращаю это в send. Но чувак какой-то другой потом хочет расширить реализацию уже моего send, и добавить там какую-то дополнительную обработку ответа.

Sergey
23.11.2016
19:19:42
ну он сделает свою реализацию интерфейса если захочет

Roman
23.11.2016
19:19:43
Блин, кароч я сам написал это все, и уже представил как я потом этому чуваку говорю, что ничего не надо тебе править в моем классе, а обрабатывай уже ответ

Sergey
23.11.2016
19:20:00
опять же - доступ к ответу давать не стоит
нечего ему обрабатывать ответы
надо будет - пусть реализует свой сервис
а работу с внешними апи заворачиваем в свои сервисы
тогда "копипастить" мало надо будет
ну и опять же - я крайне сомневаюсь что надо будет дополнительно обрабатывать ответы от внешнего api для нотификаций
ты можешь вернуть свой ответ

Roman
23.11.2016
19:21:57
Ок, что ты подразумеваешь под заворачиванием в свои сервисы? Моя фабрика, которая возвращает сейчас это всё, не есть сейчас сервисом?

Sergey
23.11.2016
19:22:08
эм...
фабрика это штука которая делает какие-то объекты

Roman
23.11.2016
19:22:22
Блин, ну да
Не фабрика

Sergey
23.11.2016
19:22:31
окей, заменим слово "сервис" на "штука"

Roman
23.11.2016
19:22:33
В общем

Sergey
23.11.2016
19:23:01
потому что "сервис" это какая-то хрень которая что-то делает

Google

Sergey
23.11.2016
19:23:48
в общем, спроси у своих троих что им надо
и сделай
первый блин всеравно выйдет комом

Roman
23.11.2016
19:24:29
Да им ничего не надо. Это я парюсь, хочу хоть как-то попробовать лучше сделать

Sergey
23.11.2016
19:24:35
сделай проще
нет потребнстей что-то возвращать - не возвращай
делай интерфейсы так, что бы никто не думал как это работает
что есть какие-то FbNotificator или другие реализации
что бы всем было просто плевать
интерфес Notificator как бы говорит "я какая-то хрень которая умеет посылать уведомления. Скажи мне послать нотификацию а я уже разберусь как"

Roman
23.11.2016
19:26:05
Ну тебе это кажется легко наверное :) А когда я это делаю первый раз, и на уровне интуиции, то все равно говнокод получится
И я мало каки-то уроков из этого вычту

Sergey
23.11.2016
19:26:31
> то все равно говнокод получится
ну тип того)
потому придумали всякий булшит вроде тестов, рефакторинги, SOLID, GRASP
кучи принципов и т.д.
что бы люди понимали хотя бы примерно что "сделать наперед не выйдет, но можно себя обезопасить, а если еще и тестами покрыть то можно будет легко все менять потом"
а те трое кто с тобой работают
у них тип тоже опыта нет делать нормально?)
ты с ними общаешься вообще?

Roman
23.11.2016
19:30:45
Общаюсь конечно. Они не знаю разницы между composer install и update

Google

Roman
23.11.2016
19:31:15
И то что они написали, мне то рефакторить надо. Если бы они писали норм, рефакторить то не особо надо было, мне кажется

Sergey
23.11.2016
19:32:11
рефакторинг это не "переписать", это "улучшить"
улучшать всегда можно
кто бы не писал
но вообще... грусть тоска)

Roman
23.11.2016
19:32:47
А на прошлой работе, тот синьер архитектор что был, делал базу для "бложика" целую неделю
Если бы у меня было у кого спросить еще, я бы сюда не писал :)
Приходится все самому пробовать разгребать

Sergey
23.11.2016
19:36:14
я могу тебе сказать что тебе стоит подумать на тему абстракций

Admin
ERROR: S client not available

Sergey
23.11.2016
19:36:17
зачем они нужны
на тему того, как дробить систему в целом
как делить ее на куски
декомпозиция и все такое
надо бы упражнений каких придумать...
p.s. ну просто я сейчас пишу штуки и мне интересно может я не те предположения взял за основу (о том что люди не понимают)

Fayozjon [CybernatiC]
24.11.2016
11:28:42
Привет всем, кто это уже читал?
https://habrahabr.ru/post/316008/

Sergey
24.11.2016
11:28:57
поднимите руки кто из Беларуси и кому насрать?)

Aleh
24.11.2016
11:29:02
)))

Google

Mihail
24.11.2016
11:29:20

Sergey
24.11.2016
11:29:34
зато очень по беларусски, "а можа так и трэба"

Nick
24.11.2016
11:29:35
лол
из Украины, поэтому тож насрать

Mihail
24.11.2016
11:31:15
все труба пора переезжать )

Алексей
24.11.2016
11:31:25

Fayozjon [CybernatiC]
24.11.2016
11:31:30
Ну я вообще в Узбекистане, но все же ?

Mihail
24.11.2016
11:31:32
надо к Сереге в Беларусь

Sergey
24.11.2016
11:32:48
что до новости - ну это надо читать и вникать что бы делать какие-то выводы. Строить суждения по заголовкам как-то негоже

Aleh
24.11.2016
11:35:27
но поскольку хата с краю...)

Roman
24.11.2016
11:41:35

Sergey
24.11.2016
12:03:27

Nick
24.11.2016
12:05:22
По сути всё тоже мы можем реализовать и на обычных функциях


Roman
24.11.2016
12:16:56
тип того.
Ок. Для меня, название "интерфейс", уже всё объясняет. Интерфейс, это по сути, начальная (или конечная) граница абстракции. Интерфейс должен тебе просто давать простые методы доступа, не объясняя, что там за ним происходит. Та же кнопка на сайте, для обычного пользователя, это интерфейс взаимодействия с сайтом. У него есть простой доступ к кнопке, это клик. А то что происходит, ему уже не важно.
За абстрактный класс, не знаю, сложно сказать, т.к. я может не до конца все для себя понимаю. Для меня, главная возможность абстрактного класса заключается в том, что нельзя создать его экземляр. Т.е. он может выступать, как базовая реализация, с каким-то функционалом, для его потомков. Абстрактный класс дает нам возможность сгруппировать классы в дерево, где он будет стоять в вершине этого дерева. Но в то же время, он не предоставит нам возможности взаимодействовать через него, с его потомками. Мы сможет работать только уже непосредственно с его потомками.


Pavel
24.11.2016
12:25:18
Интерфейс описывает необходимое поведение класса, не содержит в себе реализации
Абстрактный класс - то же самое что и интерфейс, однако может содержать в себе базовую реализацию


Sergey
24.11.2016
13:56:09
> Для меня, главная возможность абстрактного класса заключается в том, что нельзя создать его экземляр.
но интерфейсы ж тоже самое тебе предоставляют)
Ок. Для меня, название "интерфейс", уже всё объясняет. Интерфейс, это по сути, начальная (или конечная) граница абстракции. Интерфейс должен тебе просто давать простые методы доступа, не объясняя, что там за ним происходит. Та же кнопка на сайте, для обычного пользователя, это интерфейс взаимодействия с сайтом. У него есть простой доступ к кнопке, это клик. А то что происходит, ему уже не важно.
За абстрактный класс, не знаю, сложно сказать, т.к. я может не до конца все для себя понимаю. Для меня, главная возможность абстрактного класса заключается в том, что нельзя создать его экземляр. Т.е. он может выступать, как базовая реализация, с каким-то функционалом, для его потомков. Абстрактный класс дает нам возможность сгруппировать классы в дерево, где он будет стоять в вершине этого дерева. Но в то же время, он не предоставит нам возможности взаимодействовать через него, с его потомками. Мы сможет работать только уже непосредственно с его потомками.
попробуй теперь то что ты высказал связать с таким понятием как "тип"


Roman
24.11.2016
14:00:17
Не могу. Тип чего?

Sergey
24.11.2016
14:00:48
Не могу. Тип чего?
ну есть такая концепция в программировании как типы, типы данных, типы объектов...
typeof, instanceof - проверяют на типы
следовательно у тебя будут абстрактные типы, и конкретные типы.