@oop_ru

Страница 40 из 785
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
B это не UI
тогда я запутался

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

кто тебя знает

класс может быть один

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