🐴
у меня есть Shell
🐴
(new Shell)->exec()
Sergey
ты ж его не в гейтвее создаешь? а как зависимость передаешь?
🐴
разумеется
🐴
у него тоже есть интерфейс
Sergey
ну вот интерфейс делать если у тебя сейчас только одна реализация... ну такое
Sergey
лишняя работа
Sergey
мне например обычно лень)
🐴
а у меня у всего только одна реализация
Sergey
я всегда могу когда интерфейс стабилизируется сделать refactor -> extract interface
Sergey
а у меня у всего только одна реализация
ну справедливости ради твоя задача решается спокойно на bash)
🐴
да
🐴
я всял простую задачу
Sergey
и слои тебе тут не особо нужны
Sergey
просто классы
Sergey
можно даже без интерфейсов
Sergey
интерфейсы офигенно нужны когда у тебя имеет смысл выделять границы между слоями/модулями
Sergey
ну или для late binding
🐴
без интерфейсов приложение будет зависеть от гита
Sergey
без интерфейсов приложение будет зависеть от гита
ну простой пример. Репозитории в доктрине
Sergey
знаком же с ними?
Sergey
ты делаешь для каждого репозитория интерфейс или тупо будешь работать с доктриной в одном классе и завязывать реализацию на него?
Sergey
90% всех разработчиков не парятся и не выносят реализацию. Это можно сделать потом
Sergey
собственно по этой причине я не пишу суффикс Interface у своих штук
Sergey
я там выше как раз на эту тему скидывал видос
Sergey
https://www.youtube.com/watch?v=ZsHMHukIlJY
Sergey
видос о правильном именовании вещей. Эти суффиксы/префиксы не несут никакой полезной смысловой нагрузки и только засоряют систему. А когда у тебя нет этих суффиксов, то тебе без разницы интерфейс там или конкретный класс
Sergey
а стало быть когда ты конкретный класс решишь заменить на интерфейс у тебя не будет с этим проблем.
🐴
хорошо
🐴
а вот модели
🐴
создание модели по ее ДТО
🐴
если они оба простые
🐴
нормально ли сделать статический конструктор у модели для этого?
Sergey
тип fromDTO?
Sergey
норм
🐴
да
Sergey
в статике нет ничего плохого
Sergey
все зло в статических пропертях потому что это все те же глобальные переменные
🐴
тогда такой вопрос
🐴
как сделать приложение тестируемым, если оно внутри себя создает модели?
🐴
в смысле, нормально ли, что тест приложеня буде косвенно тестировать и модели?
Sergey
unit test-ы это изолированные тесты
🐴
вот я дал приложению мок гита, который возвращает предопределенные DTO, приложение там что-то подумало, и выплюнуло DTO для представления
Sergey
пока у тебя операции не выходят за рамки текущего процесса (чтение файлов, запуск других процессов, лазать в базу, ходить по сети) - у тебя это все еще изолированные тесты
Sergey
вот я дал приложению мок гита, который возвращает предопределенные DTO, приложение там что-то подумало, и выплюнуло DTO для представления
вообще может тебе не нужны эти все DTO и отдельные слои, у тебя в базе что-то храниться должно еще?
🐴
т.е. даже несмотря на то, что там внутри создаются другие классы, это все равно будет unit test
🐴
нет никакой базы
🐴
гит-> приложение -> вьюха
🐴
ну и чуть-чуть конфига и пользовательского ввода
Sergey
эм... то есть... твое приложение забирает DTO и тупо его возвращает наружу?
Sergey
я к тому что откуда у тебя тогда необходимость в fromDTO?
Sergey
так что по итогу остается приложению?
🐴
оно возвращает другое ДТО
Sergey
хм....
Sergey
а статический конструктор зачем тогда?
🐴
идея была такая, что я части бизнес-логики рассую по моделям. например у меня будет класс Tags, который будет уметь отдавать последний тег, и предыдущий тег для заданного
🐴
ну или TagList
Sergey
эм.... $gitRepository->tags()
🐴
типа так TagList::fromDTO($git->getTags());
Sergey
скорее так
Sergey
типа так TagList::fromDTO($git->getTags());
ты по мойму сильно усложняешь
🐴
эм.... $gitRepository->tags()
в этом случае репозиторий возвращает готовую модель
🐴
мне кажется это неправильно, потому что репозиторий не должен знать про мою внутреннюю кухню
🐴
репозиторий это плагин
Sergey
нет
Sergey
репозиторий это git репозиторий
🐴
да
Sergey
ну мол давай рассуждать не в терминах "паттернов"
🐴
именно он
Sergey
а называть вещи своими именами
Sergey
ты достаешь из "git репозитория" теги и коммиты
🐴
да
Sergey
значит тебе нужна хрень представляющая доступ к git репозиторию, возвращающая тебе теги и коммиты
🐴
так
Sergey
сами по себе теги в git это просто метки, они ничего не знают
🐴
дада
Sergey
они помечают коммиты
🐴
ну вот у меня появляется GitRepo::getCommit(string $rev): Commit
Sergey
то есть тебе нужна будет еще какая-то штука аля $gitLog->getCommitsBeetween($tag1, $tag2)