
Sergey
10.02.2017
22:41:40
цикличность... если появляется что-то крутое, оно становится модным, распространяется быстрее чем люди осознают смысл и идея протухает. Скорее всего через какое-то время у кого-то возникнет совершенно новая крутая идея... которая на самом деле будет тем же что было и раньше, но с другими именами... и цикл повторяется

Юра В
10.02.2017
22:41:48
Это пушто они книжки не читали нормальные ))

Sergey
10.02.2017
22:42:07

Aleh
10.02.2017
22:42:31

Google

Sergey
10.02.2017
22:42:49
заметь... почти все его крутые мысли некой двусмысленностью обладают
тип "Так, у нас есть концепт который заключается в message passing и late binding... давайте назовем это ООП"
почти как у Тургве с MVC)
или Тругве... ох и сложное у него имя

Артур Евгеньевич
10.02.2017
22:45:26
Да спасибо)
Интересно было почитать

Sergey
10.02.2017
22:45:45

da horsie
10.02.2017
22:46:44
вот я за разработку в целом хочу
накинуть
за test-first approach

Sergey
10.02.2017
22:48:22
p.s. ищу людей которые делают недо-микросервисы. то есть микросервисы но без разделения на отдельные системы с отдельными базами данных. Тот же уровень и принципы изоляции но без усложнений вида "сделаю я это как распределенную систему с IPC или общением по сети"

Google

Sergey
10.02.2017
22:49:19
за test-first approach
норм. основная цель - продумать что ты делаешь и зачем. Основная ошибка большинства - это не про тесты.

da horsie
10.02.2017
22:50:08
вот скажем, надо мне сделать некую штуку, которая делает достаточно сложную работу. дергает пару апишек, вытаскивает из хранилища что-то, данные из апишек как-то фильтрует и отправляет этой штуке из хранилища, короче сложная логика какая-то

Aleh
10.02.2017
22:50:58

da horsie
10.02.2017
22:50:59
при этом я точно знаю, что именно такая логика мне нужна - апишки уже написаны, основная система уже есть, и задача у меня - внедрить именно такую штуку в максимально короткие сроки

Aleh
10.02.2017
22:52:19
за test-first approach
Я проникся, когда начал юзать для проектирования. Вместо юмла наверное или еще каких штук. При этом большая часть тестов потом удаляется)

Sergey
10.02.2017
22:52:24
ну мол test-first это больше про декомпозицию

Aleh
10.02.2017
22:52:48

Sergey
10.02.2017
22:52:54

da horsie
10.02.2017
22:53:17
но как именно моя штука будет выглядеть внутри - я не знаю. наверно мне нужен будет какой-нить ApiProxy, который будет возвращать какой-то ApiResponseObject (потому что там сложный набор данных), нужен будет типа штука-из-хранилища-репозиторий и прочее
так вот вопрос

Sergey
10.02.2017
22:53:36

da horsie
10.02.2017
22:53:40
как начать разработку моей херни в стиле тест0ферст
вот да
но снаружи у нее очень много разного поведения
и много с чем она должна взаимодействовать

Sergey
10.02.2017
22:54:08

da horsie
10.02.2017
22:54:14
сложные данные вытаскивать и возвращать

Sergey
10.02.2017
22:54:29
задача этого модуля?

Google

Aleh
10.02.2017
22:54:41
Пробуй test by example
Бери конкретный запрос и конкретный ответ

da horsie
10.02.2017
22:54:52
ну вот пример

Aleh
10.02.2017
22:54:57
И думай как из а пришло в б

da horsie
10.02.2017
22:55:16
делаю интеграцию с внешним сервисом, сквозную авторизацию
если мне в запросе пришел некий токен, я отправляю его в api, и потом ответ апи добавляю к объекту "текущий юзер"
с чего начать?

Sergey
10.02.2017
22:56:10
с интерфейса
забудь пока о том что тебе надо стучаться в апишки и прочее
вот пришел тебе запрос с токеном
что дальше?
как будет называться объект который это хэндлит, как будет называться метод

da horsie
10.02.2017
22:56:56
это легко, это есть
щас чуть больше подробностей накину

Sergey
10.02.2017
22:57:19
у тебя выходит эта штука уже есть

da horsie
10.02.2017
22:57:36
интерфейс есть

Sergey
10.02.2017
22:57:42
сколько публичных методов у этого интерфейса?
один?

da horsie
10.02.2017
22:57:55
один - отпроцессить токен

Google

Sergey
10.02.2017
22:57:57
ну тип "проведи сквозную аутентификацию"
окей
один метод. Интерфейс мы придумали
теперь мы должны как-то через этот один публичный метод проверить что объект который мы реализуем соблюдает контракт
для этого нам надо определить что все работает и выделить "что будет происходить когда что-то не так"
если мы не говорим про принципы типа SOLID и говорим только про test fist то по сути ты через этот один метод проводишь все тестирование
если ты видишь что тебе становится неудобно - надо увеличить уровень декомпозиции
например у тебя есть куча подводных камней при работе с внешним сервисом

da horsie
10.02.2017
23:00:09
ну вот и начинается, я должен определить зависимости, их засунуть в мою штуку и проверить, что она их в нужном порядке дергает

Admin
ERROR: S client not available

Sergey
10.02.2017
23:00:22
ну суть такая

da horsie
10.02.2017
23:00:57
ну метод типа такого void processToken(string token)

Sergey
10.02.2017
23:01:08
он лио кинет исключение либо просто завершится?

da horsie
10.02.2017
23:01:20
он ничего не возвращает
да

Sergey
10.02.2017
23:01:25
а ну ок
то есть по сути нам нужен тест кейс при котором нет исключений и далее будем делать триангуляцию тест кейсами которые кидают исключения
короч...

Google

Sergey
10.02.2017
23:02:18
идея в том что у тебя при тестировании всей твоей жирной логики через интерфейс одного объекта в какой-то момент станет слишком сложным составление тест кейсов и написание тестов
выход - мы можем отдельные вещи вынести в свои объекты (которые будут зависимостями твоего) со своим контрактом и писать тесты на соблюдение объектами этих контрактов.
в этом случае тебе надо лишь убедиться что твой основной объект тупо его дергает

da horsie
10.02.2017
23:03:27
правильно, я так и делаю

Sergey
10.02.2017
23:03:31
и так постепенно у тебя вся логика будет разделяться по объектам отдельным которые удобно проверять и тестить

da horsie
10.02.2017
23:03:42
дада, именно так
но, в чем засада

Sergey
10.02.2017
23:03:47
а потом, когда у тебя в твоем основном объекте не останется логики, и он будет заниматься только делигированием
ты просто удаляешь тот несчастный тест с моками
и можешь написать один интеграционный тест с позитивным флоу, что бы он прошелся по всем твоим зависимостям

da horsie
10.02.2017
23:04:29
я определил контракты моего ApiProxy и моего скажем UserRepository
и они получились сложными, там много взаимодействия происходит между ответом апишки и репой юзеров
а потом херак и апи поменялся
оказалось, что я все не так как надо напрогнозировал
типа юзер уже не по полю email достается, а по account_id например
и получается, что вся моя вроде бы стройная логика должна быть выкинута и переписана почти что заново

Sergey
10.02.2017
23:06:57

da horsie
10.02.2017
23:07:16
вот эта моя основная штука,
она отвечает

Sergey
10.02.2017
23:07:29
так... у тебя в основной штуке есть if-ы?

da horsie
10.02.2017
23:07:42
есть

Sergey
10.02.2017
23:07:46
плохо