@prophp7

Страница 62 из 1387
Sergey
08.11.2016
12:10:22
возможно ты просто не понял что такое билдеры?

Anton
08.11.2016
12:11:07
фактори методы?

Julia
08.11.2016
12:11:07
@fes0r https://github.com/fzaninotto/Faker/blob/4e81236d14da84c86f3e96561d689845bcf559ef/src/Faker/ORM/Doctrine/Populator.php#L77
ух ты какая штука, а есть русификатор для этого? чтобы фамилия, имя, адрес и тд на русском

Sergey
08.11.2016
12:11:21
фактори методы?
я ж говорил - шаблон проектирования builder

Google
Sergey
08.11.2016
12:11:25
билдеры объектов

это часть домена

$user = (new UserBuilder()) ->withEmail($faker->email) ->withPassword($faker->password, $encoder) ->withName($faker->name); ->build();

что-то типа такого

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

можно делать разные билдеры для разных типов сущностей, делать много волшебных вещей

что-то типа настраевоемой фабрики

Anton
08.11.2016
12:13:25
когда поля простые и без сложной валидации, то такой подход ок

а когда пассворд должен быть не меньше 256 символов, содержать одну букву, одну цифру, китайский иероглив и шерсть с жопы дракона - об этом надо фэйкеру сказать, но у доктриновской ентити это прописано в валидации, и хотелось бы не прописывать это в двух местах

Sergey
08.11.2016
12:16:08
> но у доктриновской ентити это прописано в валидации у меня не прописано. Я не валидирую сущности

я валидирую данные на входе

а потому в фикстурах я волен юзать что захочу

главное что бы инварианты сохранялись

Google
Sergey
08.11.2016
12:16:58
p.s. пароли такие - говно. У меня генерится пароль из словаря в 10К слов 4 рандомных слова

это явно надежнее чем 8 символов рандомных

и проще запоминать

Anton
08.11.2016
12:18:04
тогда еще головняк с типами бд может быть, если на входе норм провалидировалось, но тип у тебя стоит инт, а пришел бигинт (пример с потолка)

Sergey
08.11.2016
12:18:28
если у тебя в сущности бигинт а в базе просто инт - ты проебался)

это должна быть 500-ая ошибка

а не 422

Anton
08.11.2016
12:18:55
public function testNaturalNumbersMagnitude() { $this->forAll( Generator\choose(0, 1000) ) ->then(function($number) { $this->assertTrue( $number < 42, "$number is not less than 42 apparently" ); }); } это пример из эриса, хочу такое же, только не с примитивами, а с сущностями

именно поэтому я валидирую сущности, и факапов таких нет)

Sergey
08.11.2016
12:19:25
именно по этому придумали тесты

а валидация сущностей - так себе идея... хотя в одном из чатиков чувак описывал как он юзает валидацию инвариантов

но это не то же самое что валидация типов

да и делал он это через aop

а не через валидатор

и валидация происходила неявно в dev окружении при каждом обращении к сущности

если к этому прибавить property based тестирование - вообще лепота

Anton
08.11.2016
12:21:11
ну есть два ограничение - одно логическое (в домене) а другое техническое (в инфраструктурном уровне)

Sergey
08.11.2016
12:21:30
любое техническое ограничени практически всегда может быть устранено кастылями

bigint тому подтверждение)

Google
Anton
08.11.2016
12:21:45
но нужно своевременно об этом узнать

Sergey
08.11.2016
12:21:51
тесты

проверка инвариантов тестами

тестирование на рандомных данных

Anton
08.11.2016
12:22:09
а я в тестах тупанул, и воткнул инт, и все проходит

так я к тому и клоню

что нужно проперти бэйсед, и для этого мне и хотелось популятор юзать

Sergey
08.11.2016
12:22:50
для проперти бейз иногда полезно описывать сценарии которые должны фэйлиться

Anton
08.11.2016
12:23:05
это для любого тестирования полезно)

а про валидацию инвариантов - есть что глянуть? или это было давно и не правда?)

Sergey
08.11.2016
12:24:14
гугли design by contract

Anton
08.11.2016
12:24:16
я пока очень смутно себе представляю это дело

Sergey
08.11.2016
12:24:19
там это популярная фича

или даже

design by contract aop

Anton
08.11.2016
12:24:35
оке, спасибо

https://github.com/AOP-PHP/AOP для первого знакомства сойдет, или ересь?)

Sergey
08.11.2016
12:41:27
а че не https://github.com/goaop/framework ?

а то пакет что ты скинул не поддерживается уже пару лет точно

Anton
08.11.2016
12:58:37
я пока даже с принципами не знаком, не то что с инструментами)

Google
Fayozjon [CybernatiC]
08.11.2016
12:59:11
Привет ребят

есть поле

'MODE'=> "8:00 - 20:00"

Необходимо указать сейчас ОТКРЫТО или закрыто

Anton
08.11.2016
13:00:13
@Enleur https://github.com/goaop/goaop-symfony-bundle кстати да))

Fayozjon [CybernatiC]
08.11.2016
13:00:14
если есть наработки пожалуйста поделитесь

спасли бы мне день

Anton
08.11.2016
13:01:06
@CybernatiC_UZ > < - знакомые штуки? (это не смайлик, если что)

Fayozjon [CybernatiC]
08.11.2016
13:01:26
Спасибо кэп

Sergey
08.11.2016
13:01:28
если есть наработки пожалуйста поделитесь
гугли про работу с интервалами и расписаниями. Это довольно стандартная задача и есть даже стандарт

Admin
ERROR: S client not available

Dmitry
08.11.2016
13:03:14
а что сложного то emplodим строки. получаем 2 времени, создаем 2 даты с нужным временем и проверяем подходит ли текущее время в нужный диапазон

Sergey
08.11.2016
13:03:18
? $time = \DateTime::createFromFormat('Y-m-d', '1970-01-01'); return $time < $this->openTime || $time > $this->closeTime;

Anton
08.11.2016
13:04:54
@Enleur не, ты датетайм сравниваешь со временем)

Sergey
08.11.2016
13:05:51
https://github.com/simshaun/recurr

не уверен на 100% но можно воспринимать как "открыто/закрыто" как рекурентные события

Sergey
08.11.2016
13:06:14
@Enleur не, ты датетайм сравниваешь со временем)
openTime/closeTime это DateTime, доктрина ж их так мапит

Sergey
08.11.2016
13:06:58
мой вариант не катит?) а то думать лень)

Fayozjon [CybernatiC]
08.11.2016
13:07:27
Спасибо

Anton
08.11.2016
13:07:57
@Enleur не уверен, что это доктрина, глядя на кусок вывода)

Google
Sergey
08.11.2016
13:08:23
да под рукой был кусок кода, вот и скинул) но я уверен, это доктрина)

Sergey
08.11.2016
13:09:31
https://gist.github.com/Enleur/1701ff3485fc8ad30b117a625214750a

Sergey
08.11.2016
13:11:12
https://tools.ietf.org/html/rfc2445

че вы выдумываете

походу таки RRULE то что надо

Sergey
08.11.2016
13:12:25
выше скинул полный класс

Sergey
08.11.2016
13:14:33
я про rrule

Sergey
08.11.2016
13:16:35
такая хрень нужна в 1м месте, зачем тащить целую либу для этого?)

Sergey
08.11.2016
13:16:56
ну потому что это стандарт?)

я просто на митинге сижу и не могу думать... насколько адекватное решение использовать для расписания заведения rrule

по идее не вижу минусов сходу

никто не знает толковых булшит бинго?

Fayozjon [CybernatiC]
08.11.2016
13:38:31
$is_open = explode(" - ",$apteka['MODE']); $apteka['IS_OPEN'] = "closed"; $current_time = time(); $open = $is_open[0]; $closing = $is_open[1]; $date1 = DateTime::createFromFormat('h:i', strtotime($current_time)); $date2 = DateTime::createFromFormat('h:i', strtotime($open)); $date3 = DateTime::createFromFormat('h:i', strtotime($closing)); if($date1 > $date2 && $date1 < $date3) { $apteka['IS_OPEN'] = "open"; }

Anton
08.11.2016
14:07:47
apteka ??

*это индусская рука, если что*

@fes0r https://habrahabr.ru/post/191548/ хм, тут чувак всю валидацию в сущности держит, почти та же самая валидация, только придется свои ассерты писать

Sergey
08.11.2016
15:34:14
тогда можно выносить валидацию в аспекты

точнее проверку инвариантов

Fayozjon [CybernatiC]
08.11.2016
18:08:21
Sergey
08.11.2016
20:50:52
Прям ПЕТРОСЯН =)
что поделать если код такой)

Страница 62 из 1387