🐴
именно так
Sergei
ReleaseNotes решает понятную (мне теперь) задачу - ему дают указатель на интерфейс Gitgateway, из которого он хитро парсит commit descriptons - вроде все вполне рукопожатно в этом на мой взгляд.
Sergei
мммм единственное смущение - ReleaseNotes имеет внутренние данные ($git) которые используются ровно в одной функции.
Sergei
то есть технически оно выглядит так что класс можно вообще заменить вызовом одной функции, и передать ей на вход тот $git
🐴
и она большая
Sergei
планируется больще поведения?
🐴
нууу....
🐴
можно вообще все приложение заменить баш-скриптом
Sergei
:)
Sergei
с этим не поспорить, конечно.
Sergei
на большом проекте класс с одним методом и почти stateless у меня пожалуй вызва бы вопросы. на обсуждаемой задаче мы делаем некоторые допущения, так что мой этот вопрос снимается.
🐴
ну да
🐴
я ж в ООП играюсь тут
🐴
прототип у меня работает - один файл из 40 строчек
Sergei
в общем я перечитал код еще раз - мне сложно к чему-то всерьез придарться. даже сложно поддержать твоё замечание про то что метод слишком длинный - по моим ощущениям 30 строк делающих более-менее монолитную активность это вполне еще Ок.
Sergei
одноко
🐴
if меня бесит
🐴
я щас превратил его вот во что
🐴
https://gist.github.com/f3ath/13592b4368c50ba63a0e315accde22e6
Sergei
если предположить, что описание каждого коммита имеет сложную структуру, то есть хороший смысл замутить patter interpretator
🐴
но классы Release и SubsequentRelease весьма уродливы
Sergei
мммммм
Sergei
это кажется ход как раз в ту сторону о которой я вот выше писал
🐴
ну типа полиморфизм вместо ифа
🐴
ТИПА
🐴
и теперь $git путешествует по всем внутренним классам
Sergei
как я понимаю ты планируешь преобразовать некий в общем plain text в красивую стуркутру типа какой-то_комментарий_к_коммиту_с_разметкой => логический_блок_описания1, логический_блок_описания2, логический_блок_описания3 ... ?
🐴
и тстировать все равно сложно
🐴
мне нужно в точности то, что описано по ссылке
🐴
changelog
🐴
и его буду совать в описание моих релизов
🐴
у меня щас ООП ради ООП
Sergei
то что $git пополз по городам и весям - может быть не сильно хорошо. альтернативой могло бы быть $revisionsToIncludeInReport = $this->$git->GetCommits(rev_begin, rev_end); $release = new ReleaseDescription($revisionsToIncludeInReport); $release->printHeader($printer); $release->printChanges($printer);
Sergei
то есть я имею тут ввиду что ReleaseNotes решает, какие ревизии(коммиты) должны быть включены в собственно release notes (что само по себе кажется даже разумным), получает их описания из $git (который уже никому другому не дает), и потом создает объект ReleaseDescription который строится получая на вход уже не $git а набор обектов-описаний диапазона ревизий.
🐴
ReleaseDescription тогда становится довольно тупым
Sergei
таким образом мы попрятали $git внутри одного класса и тем самым даже соблюли single responsibility
🐴
я шас по-другому их попробую разделить
🐴
ReleaseNotes херовое название
🐴
оно вводит в заблужение
Sergei
его ответсвенность - уметь по запросу извне (по тэгу) выбрать нужные коммиты из git. при это другая система уже будет из этих запростов делать какой-то красивый текст.
🐴
мне нужна фабрика релизов, которые будут уметь печататься
🐴
либо я заноняюсь уже
🐴
но попробую)
Sergei
Ж)
Sergei
я спать - у меня завтра поездка в сторону Sierra Nevada с утра.
🐴
споки
Sergei
я при оказии подробнее расспрошу про тот формат чейнджлога - то ли он устроен совсем просто, то ли я чего-то сербезно упускаю.
🐴
первое
🐴
А гляньте еще разок на мою вторую попытку
🐴
https://github.com/f3ath/release-notes-generator
Sergei
https://github.com/f3ath/release-notes-generator
По-моему, идейно хорошо.
Sergei
В php нет традиции интерфейсы как-то декорировать, типа "IRelease", как в С++?
Golodnyi
хбз, я подписываю прям InterfaceName
Dmitriy
А я NameInterface
guga
Хм, в джаве у интерфейса никаких префиксов или суффиксов не делают, а у реализации, иногда бывает суффиксы impl или default
Kirk
Мое мнение что название реализации должно содержать ее суть
Kirk
а если у тебя один интерфейс и одна имплементация, то возможно смысла в этом интерфейсе нет
Kirk
Хм, а как делать тогда di?
оно и без интерфейсов работает
Kirk
по крайней мере в спринге
Kirk
в спринге транзации работают хуже без интерфейсов из-за проксирования обильного
guga
Да, но как только у тебя появится еще одна реализации, в слишком многих местах придётся менять значения.
Kirk
как только появится еще одна реализация, то тогда нужен интерфейс, да
guga
ide с этим вполне справляется когда делаешь extract interface
Не помню такого, и слабо представляю, что она мне конфиги править будет.
Sergey
https://www.jetbrains.com/help/idea/2016.2/extract-interface.html
Ale
Слабо представляю какой профит от того, что в имени интерфейса есть какое-то указание, что это интерфейс
Sergey
проще навигация в гитхабе)
Ale
https://github.com/f3ath/release-notes-generator
https://github.com/f3ath/git-changelog/blob/master/src/Release/BaseRelease.php protected:/
guga
но всем с универа в голову вбили, все принципы solid
Ale
Так в солид ж нет принципа добавляй I в имена интерфейсов
guga
нет, есть принцип программирования от интерфейсов
Ale
Да и круто, если в универе принципы солид хотя бы упоминалось))
guga
а когда у тебя есть блабла интерфейс, нужна же блабла реализация
guga
в c# делают IБлаБла, в джаве БлаБлаImpl на реализации
guga
Это всего лишь нейм конвейшин
Ale
http://cs.pikabu.ru/images/big_size_comm/2013-05_3/13684203607863.jpg