
Sergey
08.05.2017
14:15:07
как теперь не забыть последовательность стэпов?

Andrey
08.05.2017
14:15:18
В чем проблема получить пароль от пользователя? Где нарушение инкапсуляции? Я не знаю как и где он это хранит, меня это не интересует

Sergey
08.05.2017
14:15:37
как ты ВНЕ юзера сравниш хэши?

Google

Andrey
08.05.2017
14:16:00

Sergey
08.05.2017
14:16:19
причем тут интерфейс?

Andrey
08.05.2017
14:16:29

Sergey
08.05.2017
14:16:37
будешь вводить getPassword(): string?
Не понял в чем проблема
И - инкапсуляция. Геттеры (те которые начинаются с get и которые предоставляют доступ к стэйту) - это как раз таки нарушение инкапсуляции
более того
это сигнал к тому что у тебя поведение лежит отдельно от данных
что противоречит самой идее объектов

Andrey
08.05.2017
14:17:56
и ты решил "реюзнуть" логику
Аха, один класс по десятку проектов, и окажется что в одном требуется одно поведение, в другом другое, в десятом десятое. А у меня в классе все захардкожено будет?

Sergey
08.05.2017
14:18:18
разные проекты - разные сущности
проще скопипастить и поправить

Google

Andrey
08.05.2017
14:18:48
С тех пор как на аутсорсе и бизнес-идеи общие за мелкими изменениями

Sergey
08.05.2017
14:18:58
и у тебя исчезнет необходимость писать логику аутентификации и смены пароля
(собственно это одна из причин по которым у меня есть сущность Credentials) - оно просто приналдежит к отдельному контексту
но опять же
в том что мы сейчас обсуждаем нет "других проектов" и "аутсорса"
контекст очень простой
у нас есть юзеры и они хотят логиниться и менять себе пароль
потом может еще аватарку захотят менять

Andrey
08.05.2017
14:20:41

Sergey
08.05.2017
14:21:01
иначе зачем отдельный сишный сервер

Andrey
08.05.2017
14:21:59
Я писал про проблемы исходного кода, если он только пароль меняет - проблем нет, если делает что-то ещё - уже несколько поводов для изменения, уже нарушения принципа, о чем я писал )

Sergey
08.05.2017
14:22:28
ну то есть смотри
откуда берутся изменения?

Andrey
08.05.2017
14:23:50
иначе зачем отдельный сишный сервер
Вся игровая логика на нем, все операции с деньгами, все действия по пользователю. Я - бекенд, сервисы всякие и прочее. На нем ответ ответственность за основные действия, а на мне сопутствующее окружение

Sergey
08.05.2017
14:24:09
так смотри. ВОт я тебе скинул конкретный пример
класс User

Google

Sergey
08.05.2017
14:24:35
придумай мне поводы для изменений
не "поменять алгоритм хэширования" а "зачем поменять"

Andrey
08.05.2017
14:24:52
У нас хотят на сервере только игру оставить, все остальное на php перенестм

Sergey
08.05.2017
14:25:48
ну или там "проверять 5 предыдущих паролей а 10" "что бы предотврватить возможность перебора паролей если у юзера чего утечет с других сервисов".

Andrey
08.05.2017
14:26:16
Первое я написал, уже изменили раз. Если класс не для смены пароля - этого достаточно. После изменений с внедрением hashier - стало уже лучше

Sergey
08.05.2017
14:27:50
ладно, в другой раз, убегать надо

Andrey
08.05.2017
14:27:57
Второе ты сам написал, а оно может понадобиться

?
08.05.2017
14:28:02

Sergey
08.05.2017
14:28:29
add changeEmail)
это часть пользовательского профиля - все хорошо пока. Причина для изменений все еще одна и та же
более того, тебе всеравно для этой операции придется поменять класс User
как бы ты не пытался этого избежать

Sergey
08.05.2017
14:29:12
(а единственный способ этого избежать - сделать все поля публичными)

?
08.05.2017
14:29:42
это да, okay, no problems

Sergey
08.05.2017
14:29:43
если же делать по дефолту мутаторы - ну это код который в данный момент не нужен - мертвый код
ну и это как помахать ручкой инкапсуляции
не говоря о том что тестирование станет сложнее гараздо (относитетльно но намного больше тупого кода и меньше возможностей для моков)

Andrey
08.05.2017
14:31:02
Код менять все равно придётся, т.к. там баги сейчас ))

Sergey
08.05.2017
14:31:21

Andrey
08.05.2017
14:31:31

Google

Sergey
08.05.2017
14:31:44
вечером
могу даже статью написать почему такой подход как ты предлагаешь нарушает OCP

Andrey
08.05.2017
14:35:46
Напиши, а потом добавь hashier (перепиши тесты), потом измени 5 на 10 (переписи тесты), потом верни 5 или убери проверку (и опять перепиши тесты). А все потому, что нарушение есть. В моём случае тесты тестировали бы только добавляемое поведение, а старые тесты менять не пришлось бы (только для удаления старого кода). И я не говорю, что тесты менять плохо, но при плохой архитектуре переписывать приходится больше чем следовало. Паттерны как раз помогают в этом
вечером
Кстати, уже почти 10 вечера, где тесты? ))))))

Sergey
08.05.2017
14:37:43

Admin
ERROR: S client not available

Sergey
08.05.2017
14:38:01
вечером по UTC
добавил чутка тестов для затравки

Andrey
08.05.2017
14:43:38
что за чушь ты несешь?)
Я написал требования реальных заказчиков. Даже одного. Раз есть тесты, то либо забьешь на них, либо будешь переписывать. Пиши, я буду твоим заказчиком и буду менять требования как захочу ))) может на практике увидишь чем это плохо. Только твой код уже на пути к коду без проблем/вопросов, все равно придешь в том или ином виде к тому, что писал я )))

Sergey
08.05.2017
14:44:36
Ладно, буду за ноутом перечитаю
Меняй)

Andrey
08.05.2017
14:45:19
Я за ноутом только завтра вечером буду
Изменение номер 1: у нас часть пользователей с соцсети, а соцсеть требует, чтобы никакой регистрации/логинов не было. (Вроде как это реальное требование apple было, мы че-то такое делали)

Tvoy
08.05.2017
14:58:33
всем привет
народ, есть какие-то проекты опенсорс
которые на ваш взгляд имеют правильную архитектуру
?

Google

Andrey
08.05.2017
14:59:29
Потом: у нас вк же, хочу чтобы Дуров вообще не мог использовать старый пароль, а Буров мог менять на любой старый

Tvoy
08.05.2017
14:59:49
php например

Евгений
08.05.2017
15:44:18

Tvoy
08.05.2017
15:44:57

Евгений
08.05.2017
15:47:29

Yumi
08.05.2017
18:23:52
А что за языки прям тру ООП? Ну кроме smalltalk.

Like
08.05.2017
18:24:33

?
08.05.2017
18:25:14

Like
08.05.2017
18:25:43
Если вспомнить вчерашний (кажись) спор насчет процедурщины и ооп - нету тру ооп языков (это был вывод)

Tvoy
08.05.2017
18:26:39
а что значит тру ооп?

Andrey
08.05.2017
18:27:04

Yumi
08.05.2017
18:32:45

Артур Евгеньевич
08.05.2017
19:43:03
а чем джава и c# не тру ооп?

Andrey
08.05.2017
19:47:15

Paul
08.05.2017
19:50:50
Примтивы есть.
То есть хаскель и раст более ООП, чем кресты и жаба, так?

Andrey
08.05.2017
19:51:17

Paul
08.05.2017
19:51:27
Все понятно.

Andrey
08.05.2017
19:55:59
Даже обидно как-то)

Evgeniy
08.05.2017
19:58:46
ну в rust тоже есть примитивы же
если речь о примитивах