
Sergey
27.06.2017
21:59:56
т.е у нас есть щас контроллер, который направляет вызов с сервис. это сервис спрашивает apiClient и gravatarWrapper(который делает запрос к граватару и если ниче не вернуло, возвращает дефолт картинку) и возвращает до самого верха результат этого всего дела?

Sergey
27.06.2017
22:00:16
и это ок, если ты можешь так разделить систему, и ты очень хорошо все сделал с точки зрения связанности/зацепления

Sergey
27.06.2017
22:00:28

Sergey
27.06.2017
22:00:31
проблема в том что 95% разработчиков а то и больше так сделать никогда не смогут

Google

Sergey
27.06.2017
22:00:53
и в этом всем нужны тесты только для клиентов к апишке юзеров и граватара, и то если это не готовые либы

Sergey
27.06.2017
22:00:56
может быть если какой-то код перекинуть туда где он нужнее, а какой-то выкинуть в другое место, ситуация резко поменяется?

Sergey
27.06.2017
22:01:22

Sergey
27.06.2017
22:02:06
я видал проекты где "все разбили, простенько" но что-то как-то не очень. ЛОгика размазана по классам, по отдельности их тестить нет смысла но и то что они лежат отдельно друг от друга как бы тоже смысла и простоты не добавляет

Sergey
27.06.2017
22:02:37
т.е возвращаемся к оригиналу когда у нас прям в контроллере эти операции выполняются? (я про пример выше с апишкой)

Sergey
27.06.2017
22:03:07
а контроллер просто делигирует логику в определенной последовательности

Sergey
27.06.2017
22:03:28
ну там получается тесты нам не нужны

Sergey
27.06.2017
22:03:38
но они не сказать что бесполезны

Sergey
27.06.2017
22:03:49
либо сервис, который дергает юзеров и граватары, будет тестироваться только верификацией вызовов

Sergey
27.06.2017
22:04:13

Google

Sergey
27.06.2017
22:04:46
я не это хочу потестить как правило
а что будет с тестовым кодом если оно таки эту штуку вызовет

Sergey
27.06.2017
22:06:05
ну вот наш сервис с методом, такой выходит?
function findUser($id){
$user = $this->apiClient->findUser($id);
if(null === $user) throw new NotFoundException();
$user->setAvatar($this->gravatarWrapper->get($user->getEmail));
return $user;
}

Sergey
27.06.2017
22:06:49
ну тип того

Sergey
27.06.2017
22:07:01
какой для него тест будет?

Sergey
27.06.2017
22:07:26
мне не очень нравится конечно...
я бы $user->setAvatar($this->gravatarWrapper->get($user->getEmail));
вынес бы в декоратор

Sergey
27.06.2017
22:07:59
ты декоратор хочешь завязать на юзере?

Sergey
27.06.2017
22:08:02
тогда простенький тест кейс что бы плевался эксепшенами

Sergey
27.06.2017
22:08:40

Sergey
27.06.2017
22:09:14
function findUser($id) {
$user = $this->next->findUser($id);
$user->setAvatar($this->avatars->forEmail($user->getEmail());
return $user;
}

Sergey
27.06.2017
22:09:34
null object?
или куда проверка на null делась

Sergey
27.06.2017
22:10:12
null object?
допустим это декоратор для нашего адаптера который уже хэндлит кейс что null-а у тебя не будет никогда
p.s. и да, я скорее всего захерачил бы подобное без тестов в контроллере прямо

Sergey
27.06.2017
22:10:50
вот так простенький кейс из 4х строчек кода превратился в 4 класса, с тестом на каждый)

Sergey
27.06.2017
22:11:07
я могу тебе кейс который сегодня покрывал рассказать

Google

Sergey
27.06.2017
22:11:13
тоже на тему клиентов к API

Sergey
27.06.2017
22:11:22
ай не, давай завтра
а то спать тоже полезно

Sergey
27.06.2017
22:11:28
ну как хочешь
сон для слабаков

Sergey
27.06.2017
22:11:34
?

Racibor
27.06.2017
23:01:17
приветствую, здесь есть кто-то с кем можно обкашлять разговоры о linux ??

F01134H
27.06.2017
23:05:15
нету

Mykola
27.06.2017
23:17:03
нету

Андрэ
28.06.2017
06:05:54
нету

Sergei
28.06.2017
09:36:12
Кто то может кинут что то из Боба Мартина? только самое лучшее, некоторые видео на ютубе с не очень хорошими отзывами.

Aleh
28.06.2017
09:36:49

Sergei
28.06.2017
09:39:55

Hack
28.06.2017
11:26:36
всем ку

F01134H
28.06.2017
11:50:45
парни, сорян за оффтоп, что означает термин throttling?

Андрэ
28.06.2017
11:52:18
частота запросов типа

Andrey
28.06.2017
11:57:57
Всё зависит от контекста.

F01134H
28.06.2017
11:58:10
в api
к примеру

Google

Viktor
28.06.2017
11:58:26
парни, сорян за оффтоп, что означает термин throttling?
В процессорах есть такой механизм если не ошибаюсь, забивание пустых операций в цепочку выполнения что бы уменьшить нагрузку на проц, срабатывает при перегреве например. Для себя предствляю как на велосипедах старых могли прохапывать педальки )

F01134H
28.06.2017
11:58:45
Понял

Admin
ERROR: S client not available

Viktor
28.06.2017
11:58:45

F01134H
28.06.2017
11:58:55
т.е. это механизм работающий при рейт лимитах, пропускающий запрос

Denis
28.06.2017
12:13:23
Так он в очередь ожидания складывает или просто не принимает операции?

val
28.06.2017
12:16:16
скорее игнорит

Denis
28.06.2017
12:16:31
Игнорит операции?
Жестоко

Javharbek
28.06.2017
12:16:49
Кто знает хорошие книги по ООП который сам читал может посоветовать.

Denis
28.06.2017
12:17:29
Дэвид вэст object thinking вроде

Javharbek
28.06.2017
12:18:41

Like
28.06.2017
12:21:01

Javharbek
28.06.2017
12:22:13
Поэтому и спросил потому что в гугле только в english version есть

Like
28.06.2017
12:22:27

Denis
28.06.2017
12:23:41
Зачем русский? Переводы же непонятные почти всегда :)
Вон попробую переведи throttling

Aleh
28.06.2017
12:24:26
ну да, обычно перевод надо читать вместе с оригиналом
сверяя слова)

Google

Denis
28.06.2017
12:24:52
Извращенцы)

Aleh
28.06.2017
12:25:15
в таком случае конечно же пропадает смысл в чтение перевода совсем

Javharbek
28.06.2017
12:26:51
Денис, вы читали эту книгу?

Denis
28.06.2017
12:27:16
Читал)

Javharbek
28.06.2017
12:28:16
Читал)
Примеры есть что особеного есть в этой книги от остальных книг по вашему?

Sergey
28.06.2017
12:30:23
david west еще приложил руку к "Head first object-oriented analysis and design", кто-то читал?

Denis
28.06.2017
12:32:31

Javharbek
28.06.2017
12:35:58
Ещё есть книги интерестные по Объектно-орентированому программирование (ООП).

val
28.06.2017
12:41:34
Бертран Мейер. Объектно-ориентированное конструирование программных систем.

Denis
28.06.2017
12:42:35
Блин, чувак, ООП крутится вокруг трёх слов: инкапсуляция, наследование, полиморфизм. Почитай про них и всё станет ясно. А остальное это конкретные практики и рекомендации вроде SOLID, GRASP, PATTERNS
А лучше читай нормальный ОО код.