
da horsie
24.12.2016
00:29:18
еще раз

Sergey
24.12.2016
00:29:20
иначе нет никакого смысла в разделении на слои

da horsie
24.12.2016
00:29:21
B это не UI

Sergey
24.12.2016
00:29:32

Google

da horsie
24.12.2016
00:29:35
это интерфейс доступа к гиту, я из него читаю

Sergey
24.12.2016
00:29:40
ааа

da horsie
24.12.2016
00:29:44
имплементация может быть разная

Sergey
24.12.2016
00:29:46
тогда тебе нужна инверсия зависимости)

da horsie
24.12.2016
00:29:49
либо консольный гит

Sergey
24.12.2016
00:29:52
и тогда все будет хорошо)

da horsie
24.12.2016
00:29:52
либо через сеть
ну я и организую ее интерфейсом
и приложние и гейтвей к гиту - оба зависят от интерфейся
а
интерфейс описывает методы, которые должны возвращать ДТОшки

Sergey
24.12.2016
00:31:58
https://gist.github.com/fesor/4e56f536448463d4e5f4939287b42f6d

da horsie
24.12.2016
00:32:28
да, правильно у тебя в коде

Google

Sergey
24.12.2016
00:32:44
обрати внимание что Infrastructure зависит от App а не наоборот
ну мол ты науровне слоя приложения сказал "у меня должна быть штука которая вернет мне мой DTO"
и тогда DTO точно относится к слою приложения без всяких оговорок
а в инфраструктурной фигне ты уже будешь имплементить этот интерфейс
и твое приложение останется изолированным от инфраструктуры
точно так же собственно и с UI

da horsie
24.12.2016
00:34:16
понял
да
так согласен


Sergei
24.12.2016
00:35:02
аргументируй
Аргументирую.
Git - сервис, существующий за пределами нашего влияния, и изменить его поведение затруднительно. Он _уже_ предоставляет сервис, изменить/исправить который мы де-факто не можем.
Всякое наше приложение в любых раскладах будет использовать существующие возможности Git.
Создавая класс, организующий общение с Git, есть смысл определить поведение (созданием интерфейсного класса) - с набором методов, которые позволят нашему (дальнейшему) приложению общаться с Git.
Интерфейс оный что-то должен будет "делать", и иногда "возвращать".
Вот в этом месте неминуемо нам тут же необходимо договориться/пообещать, что именни и в какой форме будет этим нашим программным интерфейсом (фасадом к "настоящему" Git) возвращаться. Здесь естественным образом возникает определение структур данных, в терминах которых произойдёт общение с Git.
Далее, мы реализуем имплементапию этого интерфеиса - получаем git communication library.
Далее (хотя можем ирпараллельно, если интенфейс уже определён) мы пишем уже "клиентское приложение", которое интенфейсом пользуется.


da horsie
24.12.2016
00:35:04
но на более нзком уровне ДТО это все равно принадлежность интерфейса


Sergey
24.12.2016
00:35:38
Аргументирую.
Git - сервис, существующий за пределами нашего влияния, и изменить его поведение затруднительно. Он _уже_ предоставляет сервис, изменить/исправить который мы де-факто не можем.
Всякое наше приложение в любых раскладах будет использовать существующие возможности Git.
Создавая класс, организующий общение с Git, есть смысл определить поведение (созданием интерфейсного класса) - с набором методов, которые позволят нашему (дальнейшему) приложению общаться с Git.
Интерфейс оный что-то должен будет "делать", и иногда "возвращать".
Вот в этом месте неминуемо нам тут же необходимо договориться/пообещать, что именни и в какой форме будет этим нашим программным интерфейсом (фасадом к "настоящему" Git) возвращаться. Здесь естественным образом возникает определение структур данных, в терминах которых произойдёт общение с Git.
Далее, мы реализуем имплементапию этого интерфеиса - получаем git communication library.
Далее (хотя можем ирпараллельно, если интенфейс уже определён) мы пишем уже "клиентское приложение", которое интенфейсом пользуется.
мы уже выяснили что под "интерфейсом" в этой дискуссии я сдуру подумал что про UI речь идет
я выше привел ссылку на gist - глянь, совпадает с твоим пониманием проблемы?


Sergei
24.12.2016
00:36:03
Гм

da horsie
24.12.2016
00:44:02
мне кажется у меня прояснились некоторые вещи

Sergey
24.12.2016
00:44:32
вся соль в изоляции и декомпозиции
ну то есть ты можешь просто на бумажке рисовать схемки из операций... что тебе надо и т.д

da horsie
24.12.2016
00:45:04
и обратно

Sergey
24.12.2016
00:45:08
тип "сначала надо то-то то-то"

Google

Sergey
24.12.2016
00:45:11
потом "то-то то-то"
ну мол... просто попробуй вместо того что бы сразу ебашить составить список того что надо сделать

da horsie
24.12.2016
00:45:39
только понимания не сильно добавляется

Sergey
24.12.2016
00:45:45
ну мол "нужна хрань которая из git-а забирает лог"
потом "нужна хрень которая из лога отфильтрует что-то"
ну и т.д
на этой задаче с гитом уже не так интересно тренироваться... можно попробовать придумать другую небольшую задачку
желательно что-то что ты раньше не делал

da horsie
24.12.2016
00:46:47
мне очень интересно
я хочу ее довести до нормальной реализации

Sergey
24.12.2016
00:47:06
я к тому что ты уже код написал и упражнение будет смазанным)

da horsie
24.12.2016
00:47:11
а

Sergey
24.12.2016
00:47:14
хотя кто его знает

da horsie
24.12.2016
00:47:22
так я как написал так и сотру
я уже раза четыре заново начинал

Sergey
24.12.2016
00:47:46
составь список "как это должно примерно работать". Не структуру классов, а тупо последовательность действий примерную. Атомарные операции отдельные которые нужно провернуть
если не знаешь как что-то делается, то просто оставляй пункт "хрень которая умеет это делать"
главное понимать что надо делать
не придумавый имена операциям, не придумывай слоев
тупо список действий))

Google

da horsie
24.12.2016
00:48:35
а как называется херня, которая связывает приложение с представлением? контроллер?

Sergey
24.12.2016
00:48:44
да
но его не пиши
вообще ничего про UI в этот список пока не пиши
тебе сейчас надо приложение само по себе описать как работает
юзер стори + критерии приемки

da horsie
24.12.2016
00:49:18
да мне бы импрементацию гита описать сначала

Sergey
24.12.2016
00:49:27
ну вот я об этом и говорю
только приложение
без UI

da horsie
24.12.2016
00:49:45
а
т.е. сверху вниз строить структуру

Sergey
24.12.2016
00:49:59
причем пиши абстрактно
именно

da horsie
24.12.2016
00:50:07
сначала с пустыми интерфейсвами

Sergey
24.12.2016
00:50:07
сверху вниз
ну например... задача - надо сделать програмку которая формирует рейтинг коммитеров

da horsie
24.12.2016
00:51:20
вот конкретная задача - вывести спосок коммитов, добавленных в указанный тег
она уже сложная что пиздец

Google

da horsie
24.12.2016
00:52:09
как ее реализовать?

Sergey
24.12.2016
00:52:10

da horsie
24.12.2016
00:52:18
да

Sergey
24.12.2016
00:52:26
ну вот, у тебя уже есть два сервиса)
по сути сервис который сделает git log tag1..tag2
и нормализует структурку возможно минимально
и другая хрень которая на основе этой истории что-то сделает
еще нужна будет хрень которая будет уметь выполнять команды
что бы не через exec везде и всюду

da horsie
24.12.2016
00:54:08
еще надо получить список тегов
определить последний

Sergey
24.12.2016
00:54:13
а тупо $this->process->run("");

da horsie
24.12.2016
00:54:15
или указанный

Sergey
24.12.2016
00:54:25
главное что бы у тебя соблюдалось одно простое правило

da horsie
24.12.2016
00:55:23
то есть мне получается не нужен один интерфейс на GitGateway, а нужно ISP на каждую операцию?

Sergey
24.12.2016
00:55:54
если тебе надо сделать работу, и есть более одног оспособа это сделать, лучше вынести эту операцию в отдельную хрень
может быть и 10
кто тебя знает
класс может быть один