@oop_ru

Страница 43 из 785
da horsie
24.12.2016
06:35:43
https://gist.github.com/f3ath/686fcb4162ffa47fb6823cd316e13428

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

как ее разбить на части?

метод в 30 строк

Google
da horsie
24.12.2016
06:37:29
это собственно моя основная логика приложения

центральный if смущает

$url и $revisions всегда ходят парой

выделить их в объект?

RevisionRange

Sergei
24.12.2016
06:42:21
Смотрю

da horsie
24.12.2016
06:42:46
GitGateway получается херовый

добавил его в гист для понимания

Sergei
24.12.2016
06:44:05
ReleaseNotes получает имя тага и печатает комментарии к коммиту?

(или вообще ко всем таженым коммитам, если не указали)

?

da horsie
24.12.2016
06:44:55
печатает все новые коммиты в теге

по сравнению с прошлым тегом

Google
da horsie
24.12.2016
06:45:17
http://keepachangelog.com/en/0.3.0/

элемент changelog'а печатает

а

можно адааптер замутить

враппер вернее

к GitGateway

который будет создавать сложную херню типа RevisionRange

тогда и URL и набор коммитов получаются свойствами RevisionRange

и вроде как логично все выглядит

а бывает фасад к одному классу?

Sergei
24.12.2016
06:52:35
Почему бы и нет.

Класс который преобразует низкоуровневый интерфейс во что-то более высокоуровневое. Не вижу греха.

da horsie
24.12.2016
06:53:46
тогда это фасад наверно

фасад над GitGateway

понимашь, что я имею в виду?

о

я начинаю сходить с ума )

Sergei
24.12.2016
07:55:17
почитал http://keepachangelog.com/en/0.3.0/ и картина как-то проясняется вроде

итого

ты хочешь тулзу, которая читает логи git репо и каким-то способом их парсит и куда-то красиво (?) печатает

Google
da horsie
24.12.2016
07:56:15
да

в консоль

Sergei
24.12.2016
07:56:28
ок

теперь я понимаю почему ReleaseNotes на самом деле один из главных действующих лиц здесь

мои мелкие капризы - getCommit муня сбило слегка с толку, т к я почему-то подумал что оно реально выкачает заданную ревизию из git

da horsie
24.12.2016
07:59:41
это getCommitDetails скорее

Sergei
24.12.2016
07:59:47
readCommitDetails() мне бы помогло

да, так я бы меньше плутал

объект GitGateway настраивается на конкретное репо и потом все данные берет из него (типа "переклчиться ну другое репо" - так не планируется / не работает)

мне кажется GitGateway выглядит весьма разумно

da horsie
24.12.2016
08:01:50
именно так

Sergei
24.12.2016
08:03:54
ReleaseNotes решает понятную (мне теперь) задачу - ему дают указатель на интерфейс Gitgateway, из которого он хитро парсит commit descriptons - вроде все вполне рукопожатно в этом на мой взгляд.

мммм единственное смущение - ReleaseNotes имеет внутренние данные ($git) которые используются ровно в одной функции.

то есть технически оно выглядит так что класс можно вообще заменить вызовом одной функции, и передать ей на вход тот $git

da horsie
24.12.2016
08:05:10
и она большая

Sergei
24.12.2016
08:05:12
планируется больще поведения?

da horsie
24.12.2016
08:05:26
нууу....

можно вообще все приложение заменить баш-скриптом

Sergei
24.12.2016
08:05:49
:)

с этим не поспорить, конечно.

Google
Sergei
24.12.2016
08:08:18
на большом проекте класс с одним методом и почти stateless у меня пожалуй вызва бы вопросы. на обсуждаемой задаче мы делаем некоторые допущения, так что мой этот вопрос снимается.

da horsie
24.12.2016
08:08:45
ну да

я ж в ООП играюсь тут

прототип у меня работает - один файл из 40 строчек

Sergei
24.12.2016
08:11:45
в общем я перечитал код еще раз - мне сложно к чему-то всерьез придарться. даже сложно поддержать твоё замечание про то что метод слишком длинный - по моим ощущениям 30 строк делающих более-менее монолитную активность это вполне еще Ок.

одноко

da horsie
24.12.2016
08:12:10
if меня бесит

я щас превратил его вот во что

https://gist.github.com/f3ath/13592b4368c50ba63a0e315accde22e6

Sergei
24.12.2016
08:13:30
если предположить, что описание каждого коммита имеет сложную структуру, то есть хороший смысл замутить patter interpretator

da horsie
24.12.2016
08:14:05
но классы Release и SubsequentRelease весьма уродливы

Sergei
24.12.2016
08:14:22
мммммм

это кажется ход как раз в ту сторону о которой я вот выше писал

da horsie
24.12.2016
08:15:08
ну типа полиморфизм вместо ифа

ТИПА

и теперь $git путешествует по всем внутренним классам

Sergei
24.12.2016
08:16:59
как я понимаю ты планируешь преобразовать некий в общем plain text в красивую стуркутру типа какой-то_комментарий_к_коммиту_с_разметкой => логический_блок_описания1, логический_блок_описания2, логический_блок_описания3 ... ?

da horsie
24.12.2016
08:17:03
и тстировать все равно сложно

мне нужно в точности то, что описано по ссылке

changelog

Google
da horsie
24.12.2016
08:17:48
и его буду совать в описание моих релизов

у меня щас ООП ради ООП

Sergei
24.12.2016
08:36:47
то что $git пополз по городам и весям - может быть не сильно хорошо. альтернативой могло бы быть $revisionsToIncludeInReport = $this->$git->GetCommits(rev_begin, rev_end); $release = new ReleaseDescription($revisionsToIncludeInReport); $release->printHeader($printer); $release->printChanges($printer);

то есть я имею тут ввиду что ReleaseNotes решает, какие ревизии(коммиты) должны быть включены в собственно release notes (что само по себе кажется даже разумным), получает их описания из $git (который уже никому другому не дает), и потом создает объект ReleaseDescription который строится получая на вход уже не $git а набор обектов-описаний диапазона ревизий.

da horsie
24.12.2016
08:40:18
ReleaseDescription тогда становится довольно тупым

Sergei
24.12.2016
08:40:25
таким образом мы попрятали $git внутри одного класса и тем самым даже соблюли single responsibility

da horsie
24.12.2016
08:41:32
я шас по-другому их попробую разделить

ReleaseNotes херовое название

оно вводит в заблужение

Sergei
24.12.2016
08:42:20
его ответсвенность - уметь по запросу извне (по тэгу) выбрать нужные коммиты из git. при это другая система уже будет из этих запростов делать какой-то красивый текст.

da horsie
24.12.2016
08:42:29
мне нужна фабрика релизов, которые будут уметь печататься

либо я заноняюсь уже

но попробую)

Sergei
24.12.2016
08:43:19
Ж)

я спать - у меня завтра поездка в сторону Sierra Nevada с утра.

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