@oop_ru

Страница 41 из 785
da horsie
24.12.2016
00:56:23
нужен ISP

Sergey
24.12.2016
00:56:41
возможно

а еще тебе надо избавиться от exec-ов в гейтвее

da horsie
24.12.2016
00:56:56
это я уже сделал

Google
Sergey
24.12.2016
00:56:57
пусть за выполнение команд отвечает отдельная хрень

da horsie
24.12.2016
00:57:10
у меня есть Shell

(new Shell)->exec()

Sergey
24.12.2016
00:57:31
ты ж его не в гейтвее создаешь? а как зависимость передаешь?

da horsie
24.12.2016
00:57:37
разумеется

у него тоже есть интерфейс

Sergey
24.12.2016
00:58:02
ну вот интерфейс делать если у тебя сейчас только одна реализация... ну такое

лишняя работа

мне например обычно лень)

da horsie
24.12.2016
00:58:31
а у меня у всего только одна реализация

Sergey
24.12.2016
00:58:32
я всегда могу когда интерфейс стабилизируется сделать refactor -> extract interface

а у меня у всего только одна реализация
ну справедливости ради твоя задача решается спокойно на bash)

da horsie
24.12.2016
00:59:15
да

Google
da horsie
24.12.2016
00:59:19
я всял простую задачу

Sergey
24.12.2016
00:59:22
и слои тебе тут не особо нужны

просто классы

можно даже без интерфейсов

интерфейсы офигенно нужны когда у тебя имеет смысл выделять границы между слоями/модулями

ну или для late binding

da horsie
24.12.2016
01:00:04
без интерфейсов приложение будет зависеть от гита

Sergey
24.12.2016
01:00:25
без интерфейсов приложение будет зависеть от гита
ну простой пример. Репозитории в доктрине

знаком же с ними?

ты делаешь для каждого репозитория интерфейс или тупо будешь работать с доктриной в одном классе и завязывать реализацию на него?

90% всех разработчиков не парятся и не выносят реализацию. Это можно сделать потом

собственно по этой причине я не пишу суффикс Interface у своих штук

я там выше как раз на эту тему скидывал видос

https://www.youtube.com/watch?v=ZsHMHukIlJY

видос о правильном именовании вещей. Эти суффиксы/префиксы не несут никакой полезной смысловой нагрузки и только засоряют систему. А когда у тебя нет этих суффиксов, то тебе без разницы интерфейс там или конкретный класс

а стало быть когда ты конкретный класс решишь заменить на интерфейс у тебя не будет с этим проблем.

da horsie
24.12.2016
01:03:31
хорошо

а вот модели

создание модели по ее ДТО

если они оба простые

Google
da horsie
24.12.2016
01:04:21
нормально ли сделать статический конструктор у модели для этого?

Sergey
24.12.2016
01:04:50
тип fromDTO?

норм

da horsie
24.12.2016
01:04:53
да

Sergey
24.12.2016
01:05:00
в статике нет ничего плохого

все зло в статических пропертях потому что это все те же глобальные переменные

da horsie
24.12.2016
01:05:45
тогда такой вопрос

как сделать приложение тестируемым, если оно внутри себя создает модели?

в смысле, нормально ли, что тест приложеня буде косвенно тестировать и модели?

Sergey
24.12.2016
01:07:44
unit test-ы это изолированные тесты

da horsie
24.12.2016
01:08:14
вот я дал приложению мок гита, который возвращает предопределенные DTO, приложение там что-то подумало, и выплюнуло DTO для представления

Sergey
24.12.2016
01:08:24
пока у тебя операции не выходят за рамки текущего процесса (чтение файлов, запуск других процессов, лазать в базу, ходить по сети) - у тебя это все еще изолированные тесты

вот я дал приложению мок гита, который возвращает предопределенные DTO, приложение там что-то подумало, и выплюнуло DTO для представления
вообще может тебе не нужны эти все DTO и отдельные слои, у тебя в базе что-то храниться должно еще?

da horsie
24.12.2016
01:09:10
т.е. даже несмотря на то, что там внутри создаются другие классы, это все равно будет unit test

da horsie
24.12.2016
01:09:25
нет никакой базы

гит-> приложение -> вьюха

ну и чуть-чуть конфига и пользовательского ввода

Sergey
24.12.2016
01:10:47
эм... то есть... твое приложение забирает DTO и тупо его возвращает наружу?

я к тому что откуда у тебя тогда необходимость в fromDTO?

Google
Sergey
24.12.2016
01:11:13
так что по итогу остается приложению?

da horsie
24.12.2016
01:11:41
оно возвращает другое ДТО

Sergey
24.12.2016
01:11:52
хм....

а статический конструктор зачем тогда?

da horsie
24.12.2016
01:14:09
идея была такая, что я части бизнес-логики рассую по моделям. например у меня будет класс Tags, который будет уметь отдавать последний тег, и предыдущий тег для заданного

ну или TagList

Sergey
24.12.2016
01:14:54
эм.... $gitRepository->tags()

da horsie
24.12.2016
01:14:57
типа так TagList::fromDTO($git->getTags());

Sergey
24.12.2016
01:15:00
скорее так

типа так TagList::fromDTO($git->getTags());
ты по мойму сильно усложняешь

da horsie
24.12.2016
01:15:42
эм.... $gitRepository->tags()
в этом случае репозиторий возвращает готовую модель

мне кажется это неправильно, потому что репозиторий не должен знать про мою внутреннюю кухню

репозиторий это плагин

Sergey
24.12.2016
01:16:44
нет

репозиторий это git репозиторий

da horsie
24.12.2016
01:16:51
да

Sergey
24.12.2016
01:16:57
ну мол давай рассуждать не в терминах "паттернов"

da horsie
24.12.2016
01:16:58
именно он

Sergey
24.12.2016
01:17:01
а называть вещи своими именами

ты достаешь из "git репозитория" теги и коммиты

Google
da horsie
24.12.2016
01:17:18
да

Sergey
24.12.2016
01:17:38
значит тебе нужна хрень представляющая доступ к git репозиторию, возвращающая тебе теги и коммиты

da horsie
24.12.2016
01:17:48
так

Sergey
24.12.2016
01:17:50
сами по себе теги в git это просто метки, они ничего не знают

da horsie
24.12.2016
01:17:56
дада

Sergey
24.12.2016
01:17:58
они помечают коммиты

da horsie
24.12.2016
01:18:29
ну вот у меня появляется GitRepo::getCommit(string $rev): Commit

Sergey
24.12.2016
01:18:31
то есть тебе нужна будет еще какая-то штука аля $gitLog->getCommitsBeetween($tag1, $tag2)

da horsie
24.12.2016
01:19:05
тупо массив строк?

Sergey
24.12.2016
01:19:14
Commit[]

массив коммитов

da horsie
24.12.2016
01:19:27
массив объектов

Sergey
24.12.2016
01:19:31
ну

никаких DTO пока-что нет

da horsie
24.12.2016
01:20:06
ну так я заебусь писать мок для этого метода

Sergey
24.12.2016
01:20:10
реализация же твоего git log может получит информацию в виде массивчика, и вместо того что бы мэпить его на dto можно прямо мэпить на сущности

da horsie
24.12.2016
01:20:29
тест раздуется, мне надо будет создать реальные классы коммитов

Sergey
24.12.2016
01:21:04
у меня есть мысль что тебе вообще мокать ничего не надо

da horsie
24.12.2016
01:21:21
почему?

Sergey
24.12.2016
01:21:40
хотя ладно... в любом случае

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