@oop_ru

Страница 351 из 785
val
04.10.2017
08:57:15
пользователь знает, что ему дали "решатель", который решает как то, который можно отменить и узнать о его здоровье

Sergey
04.10.2017
08:57:32
GradientDescent и Gradient штуки разные, может внутри GradienDescentSolver и существует какой то Gradient который может descent, но пользователю GradientDescent это знать не надо
ну тут я бы сказал что концепция объектов немного не подходит. Твоя задача прекрасно ложится на обычные функции

для объектов слишком маленький масштаб. Нужен контекст задачи

Aleh
04.10.2017
08:57:56
Ну да, это стратегии, которые лучше всего выражаются функциями

Google
Sergey
04.10.2017
08:58:18
ClassLoader назови мне по-другому

Sergey
04.10.2017
08:58:48
только Manager лишнее
то есть PasswordVerifier это норм, да?

Sergey
04.10.2017
08:59:12
а что с ним не так?

и что он делает?

просто считает хеш и сравнивает с юзеровым?

Sergey
04.10.2017
08:59:42
и что он делает?
верифаит пароль очевидно)

Sergey
04.10.2017
08:59:49
или проверяет можно ли взять такой пароль?

если проверка на можно ли взять пароль - то вполне годно

если нет - то место в методе юзера

задача к ООП относится?

верифаит пароль очевидно)
ну так, проблемы то какие?

Sergey
04.10.2017
09:02:48
ну так, проблемы то какие?
есть очень большая вероятность пропущенной концепции

Google
Sergey
04.10.2017
09:02:58
в данном случае концепция пароля или что-то связанное с доступом

Sergey
04.10.2017
09:03:21
не понял поинта

Sergey
04.10.2017
09:12:31
вот взять https://github.com/voxsim/password-verifier-kata

в понятии этой каты верификация пароля это как раз валидация

Sergey
04.10.2017
09:13:27
почему бы не проводить эту валидацию в конструкторе класса Password?)

Sergey
04.10.2017
09:13:35
отлично

теперь добавим верификацию что пароль не должен быть таким как предыдущие

а так же он не должен быть в списке паролей, которые чаще всего используются

Sergey
04.10.2017
09:14:47
первая проверка ложится в User а вторая проверка - тут есть варианты. Откуда твой PasswordVerifier узнает словарь паролей?

Sergey
04.10.2017
09:15:05
это уже его детали, клиенту пофиг

Sergey
04.10.2017
09:16:16
ну тогда будет какой-то CommonPasswordDictionary который можно даже передать в статический метод-фабрику пароля

Sergey
04.10.2017
09:16:55
>первая проверка ложится в User а вторая проверка - тут есть варианты ты еще предлагаешь в юзера ложить правила валидации?

Sergey
04.10.2017
09:17:09
да, это ж история паролей юзера

Sergey
04.10.2017
09:17:09
а как же то что юзер должен быть всегда в валидном состоянии?

Sergey
04.10.2017
09:17:16
ну то есть это совершенно разные рулы

public function changePassword(Password $oldPassword, Password $newPassword) { // проверяем по истории паролей пользователя и кидаем ошибку чуть что }

при создании юзера у нас история как бы пустая и там подобный рул не имеет смысла

Google
Sergey
04.10.2017
09:18:26
как это будет выглядеть? $user->changePassword($password), а внутри ты делаешь все валидации?

Sergey
04.10.2017
09:18:55
как это будет выглядеть? $user->changePassword($password), а внутри ты делаешь все валидации?
я думаю за валидации вроде проверка по словарю - за это отвечает фабрика паролей. Что-то типа

Sergey
04.10.2017
09:19:24
password should be larger than 8 chars password should not be null password should have one uppercase letter at least password should have one lowercase letter at least password should have one number at least

еще вот эти правила нужны, и в случае чего показать их клиенту

если он нарушил чего

Sergey
04.10.2017
09:19:57
давай разберемся, тебя валидатор строк интересует ддя UI или ты хочешь бизнес правила установить?*

а, есть еще вариант

вместо исключений юзать доменные ивенты)

InvalidPasswordUsed

Sergey
04.10.2017
09:20:42
password should be larger than 8 chars password should not be null password should have one uppercase letter at least password should have one lowercase letter at least password should have one number at least
мне нужны эти правила, + проверка по словарю, и проверка не использовался ли пароль ранее

Sergey
04.10.2017
09:20:49
ну либо ты будешь смешивать проверку бизнес правил и UI kогику (отображение ошибок валидации)

мне нужны эти правила, + проверка по словарю, и проверка не использовался ли пароль ранее
твоя проблема что ты воспринимаешь этот сэт рулов как что-то одно, а по факту пароль может спокойно существовать и без проверки по истории паролей юзера, ведь только у юзера есть эта история

Sergey
04.10.2017
09:21:46
я хочу получить ValidationViolations, а как его буду юзать это другой вопрос

Sergey
04.10.2017
09:22:06
я хочу получить ValidationViolations, а как его буду юзать это другой вопрос
это относится целиком и полностью к UI layer и там юзай валидатор

Adel
04.10.2017
09:22:08
честно говоря пароль юзера... разве это домен?

Sergey
04.10.2017
09:22:25
честно говоря пароль юзера... разве это домен?
если ты делаешь сервис типа auth0 - то почему бы и да?)

Sergey
04.10.2017
09:22:26
список правил которые должны соблюдаться и ValidationViolations, если что-то нарушено

Sergey
04.10.2017
09:23:23
без разницы, это могут быть просто логи

Google
Sergey
04.10.2017
09:23:35
это уже не должно касаться задачи

Sergey
04.10.2017
09:24:07
ты сам усложняешь себе жизнь за счет того что все проверки должны быть проведены разом. То есть мы по любому должны иметь дело с невалидным стэйтом. А это значит что мы уходим из домена и переходим в страшный процедурный мир инфраструктуры

Sergey
04.10.2017
09:24:12
т.е булевой результат не ок, эксепшенами в натяжку можно решить это, но это гавно

ты опять от темы уходишь

я говорю что мне без разницы где ты валидировать будешь первичный пароль

Sergey
04.10.2017
09:24:53
ты опять от темы уходишь
не ухожу, я уже говорил что не везде ООП нужен. Есть вещи для которых нужны функции просто

Sergey
04.10.2017
09:24:53
можешь хоть в каждом слое по одному рулу проверять

теперь возвращаемся к PasswordVerifier

Sergey
04.10.2017
09:25:08
стой

нет

погоди

список правил которые должны соблюдаться и ValidationViolations, если что-то нарушено
1. если у нас нарушены правила относящиеся к самому паролю мы априори не можем проверить ни наличие пароля в словаре ни то что у юзера оно было. Так? 2. Если пароль содержится в словаре, то его не может быть в истории юзеров 3. Если пароль валидный сам по себе - остается только один рул - проверка по истории юзера

Sergey
04.10.2017
09:28:20
User::builder() ->withPassword(Password::fromString($password, $commonPasswordDictionary); $user->changePassword(Password::fromString($oldPassword), Password::fromString($oldPassword, $commonPasswordDictionary))

>2. Если пароль содержится в словаре, то его не может быть в истории юзеров может быть исключение, если словарь обновляется
то есть проблемы будут только если мы убираем какой-то пароль из списка исключений

Sergey
04.10.2017
09:29:11
или добавляем

Sergey
04.10.2017
09:29:36
с добавлением проблем не будет. У тебя даже если в истории у кого-то оно есть, ты об этом не узнаешь даже (хэш же)

да и если есть - снова уже быть не может

Google
Sergey
04.10.2017
09:30:31
старая соль + новый пароль =(возможность) старый хеш

Sergey
04.10.2017
09:30:45
ну и опять же что делать с чуваками которые при обновлении твоих правил по паролям оказывается юзают невалидный?)

Sergey
04.10.2017
09:31:08
это ж снижает секьюрность

Sergey
04.10.2017
09:31:30
хотя можно прислать им письмо что чуваки, ваш пароль есть в базе, которую слили)

зачем юзать старую соль?
она ж всегда лежит рядом с хешем

Sergey
04.10.2017
09:31:45
хотя можно прислать им письмо что чуваки, ваш пароль есть в базе, которую слили)
ты об этом можешь узнать только в момент ввода пароля (логин например)

она ж всегда лежит рядом с хешем
и мне ее генерит password_hash который эту самую соль сам генерит и конкатенирует вместе с хэшем

Sergey
04.10.2017
09:32:29
а как ты проверишь не юзался ли пароль, если не использовать старую соль?

Sergey
04.10.2017
09:32:30
и я не хочу что бы логика хэширования просачивалась в моего юзера

а как ты проверишь не юзался ли пароль, если не использовать старую соль?
у тебя при смене пароля есть пароль в открытом виде

делаешь просто password_verify для всех этих штук

Страница 351 из 785