
Sergey
06.01.2017
18:05:18
Cover Your Ass Engineering - о да :-)

da horsie
06.01.2017
23:28:34
попытка #3 написать что-то объектное https://github.com/f3ath/git-changelog

Sergey
06.01.2017
23:30:00
https://github.com/f3ath/git-changelog/blob/master/src/Git/Commit.php#L23
мне кажется этому место в том месте, где ты лог читаешь

Google

Sergey
06.01.2017
23:30:42
https://github.com/f3ath/git-changelog/blob/master/src/Changelog.php#L20
тут можно было бы завернуть это добро в 2 стратегии
что бы избавиться от if-а
уберем лишний тест кейс

da horsie
06.01.2017
23:31:27

Sergey
06.01.2017
23:31:54
> но я нешмогла
ну... просто два класса имплементящих что-то вроде ChangesetProvider
и третий класс который будет выбирать нужный по параметру
но в целом могу сказать что выглядит лучше чем в прошлый раз
еще не заглядывал в тесты

da horsie
06.01.2017
23:32:55
тестов мало
Git не покрыт

Sergey
06.01.2017
23:33:48
ну во всяком случае рефакторить меньше)

Google

Sergey
06.01.2017
23:34:28
https://github.com/f3ath/git-changelog/blob/master/src/Versions.php#L22
вот эта штука слегка смущает
чуть-чуть совсем

da horsie
06.01.2017
23:34:59
ну не фабрику же городить ради этого

Sergey
06.01.2017
23:35:16
а тебе фабрика и не нужна, тебе нужен какой-то процессор версий
ну или фабрика некой VersionCollection
если упарываться
что бы система типов описывала взаимодействие логики

da horsie
06.01.2017
23:35:52
тебя смущает plural название?

Sergey
06.01.2017
23:36:08
не, меня смущает что в конструктор может придти что угодно

da horsie
06.01.2017
23:36:18
может

Sergey
06.01.2017
23:36:22
но судя по статическому методу должен придти массив чего-то в строго определенном формате
то есть мы допускаем нарушение инварианта

da horsie
06.01.2017
23:36:30
но semver будет орать, если там лажа

Sergey
06.01.2017
23:36:43
ну мол в таком ключе скорее всего все ок

da horsie
06.01.2017
23:38:34
а из хороших решений что-то есть?
в смысле у меня в коде

Sergey
06.01.2017
23:39:11
RevisionRangeInterface норм
(еще бы без суффиксов но я не буду спорить по coding style)

Google

Sergey
06.01.2017
23:39:38
ну мол ты хорошо изолировал эту хрень
https://github.com/f3ath/git-changelog/blob/master/src/Changelog.php#L31
вот эту штуку бы вынести в какой-нибудь форматтер
но это мелочи

da horsie
06.01.2017
23:40:56
это да

Sergey
06.01.2017
23:42:08
блин напомни завтра

da horsie
06.01.2017
23:42:14
перевод?

Sergey
06.01.2017
23:42:26
перевод?
посижу поперевожу сейчас и пойду спать
просто хотелось с тобой как раз на примере твоего кода про SOLID чутка поболтать)

da horsie
06.01.2017
23:42:53
добро

Sergey
06.01.2017
23:43:15
у тебя там есть маленькие и простые примеры когда ты например SRP нарушил и парочка где ты их соблюдаешь
на примерах все же проще

da horsie
06.01.2017
23:44:09
https://github.com/f3ath/git-changelog/blob/master/src/GitGateway.php
вот этот класс мне не нравится
эдакий фасад-адаптер
без четкой ответственности
но я хз как без него

Sergey
06.01.2017
23:45:41
проанализируй где и зачем ты его юзаешь

da horsie
06.01.2017
23:45:52
чтобы разгрузить Changelog

Sergey
06.01.2017
23:45:54
ну то есть "там-то что бы версию забрать"

Google

Sergey
06.01.2017
23:46:09
там-то что бы чейнджлог забрать между двумя ревизиями

da horsie
06.01.2017
23:46:11
просто потому что без него сложно тестировать

Sergey
06.01.2017
23:46:29
https://github.com/f3ath/git-changelog/blob/master/src/GitGateway.php#L61
вот эта штука не понятна

da horsie
06.01.2017
23:47:34
в целом он переводит с терминов гита в термины чейнжлога
коммит -> изменение

Admin
ERROR: S client not available

Sergey
06.01.2017
23:47:54

da horsie
06.01.2017
23:47:57
тег -> версия
ну у него много задач

Sergey
06.01.2017
23:48:41
ладно) завтра)

da horsie
06.01.2017
23:48:47
оке )

Sergey
06.01.2017
23:48:59
> ну у него много задач
исходи из позиции "по каким причинам реализация может поменяться" а не по задачам

da horsie
06.01.2017
23:49:10
я из этого и исходил
получается, что "ни по каким"
я не вижу причин для его изменений

Sergey
06.01.2017
23:49:40
поменялся способ работы с git (с вызова git через exec на работу с какой-нибудь библиотечкой сишной интегрированной)

da horsie
06.01.2017
23:49:47
это задача Git
тут все ок

Google

Sergey
06.01.2017
23:49:58
getDiffUrl
вот метод например

da horsie
06.01.2017
23:50:26
этот тоже изолирован

Sergey
06.01.2017
23:50:37

da horsie
06.01.2017
23:50:48
ну у него нет причин меняться

Sergey
06.01.2017
23:50:49
о вот к слову
смотри
public function getDiffUrl(string $rev1, string $rev2): string
{
$remote_url = $this->git->getRemoteUrl($this->remote);
$remote = $this->remote_factory->createByUrl($remote_url);
return $remote->getDiffUrl($rev1, $rev2);
}

da horsie
06.01.2017
23:51:09
поменяется фабрика

Sergey
06.01.2017
23:51:24
у тебя во всем классе только этот метод использует remote_factory

da horsie
06.01.2017
23:51:25
добавится новый Remote\BitBucket
да

Sergey
06.01.2017
23:51:46
а хотя не, он юзает ->git
https://github.com/f3ath/git-changelog/blob/master/src/GitGateway.php#L39
а это чего?

da horsie
06.01.2017
23:52:40
получить дату коммита
тега
ну или версии в нашем случае