
James Tiberius Kirk ?
11.01.2017
18:20:17
Как вы относитесь к такой болезни ООП как AbstractFactoryBuilderBean?

Sergey
11.01.2017
18:20:37

da horsie
11.01.2017
18:21:16
это билдер абстрактных фабрик или абстрактный билдер фабрики?

Sergey
11.01.2017
18:22:16
билдер абстрактный фабрик + бесполезный суфикс

Google

Sergey
11.01.2017
18:22:56
в целом же названия типов объектов должны передавать что делают объекты
тут этого нет

James Tiberius Kirk ?
11.01.2017
18:23:22
с помощью этого объекта можно создать любую фабрику

Sergey
11.01.2017
18:24:08
что значит "любую"?
так не бывает

James Tiberius Kirk ?
11.01.2017
18:24:38
сперва надо заэкстендиться

Sergey
11.01.2017
18:25:52
мы тут знаете ли плохо к наследованию относимся)

da horsie
11.01.2017
18:26:25
абстрактная фабрика это вообще нечто странное
какой у нее публичный интерфейс?

Sergey
11.01.2017
18:26:39
абстрактная фабрика это на самом деле прекрасный пример компромисов
это тот случай когда избавиться от if-в не выходит)

Google

da horsie
11.01.2017
18:27:24
public НепонятноЧто createObject() ?

Sergey
11.01.2017
18:27:44
ну у тебя у всех "непонятно что" есть общий базовый тип
а за счет принципа подстановки Барбары Лискоу тебе этого должно хватать

da horsie
11.01.2017
18:28:12
CreatableByAbstractFactoryInterface?

Sergey
11.01.2017
18:28:19
ээм... нет
ну например

da horsie
11.01.2017
18:28:54
AbstractButton, да?
ButtonInterface

Sergey
11.01.2017
18:29:05
ну тип того
только давай без суффиксов/постфиксов бесполезных
просто Button

da horsie
11.01.2017
18:29:19
почему тогда фабрика абстрактная

Sergey
11.01.2017
18:29:54
фабрика строит инстансы нужных типов исходя из входящих данных
поскольку результатом ее работы является некая абстракция она и называется абстрактной

da horsie
11.01.2017
18:30:23
то есть фабрика вполне конкретная?
у нее есть инстанс?

Sergey
11.01.2017
18:30:38
конкретная фабрика которая делает абстракции

da horsie
11.01.2017
18:30:59
почему тогда не назвать ее просто ButtonFactory?

Sergey
11.01.2017
18:31:01
> у нее есть инстанс?
хз, я обычно это делаю в статическом методе в базовом классе

Google

Sergey
11.01.2017
18:31:25
у меня к тебе встречный вопрос
почему ты не назовешь ProductRepository не как Catalog
?
"прудукты хранятся в каталоге" звучит как-то логичнее с точки зрения бизнеса нежели "продукты лежат в репозитории продуктов"

da horsie
11.01.2017
18:33:02
а почему я не назову? может и назову. просто Repository имеет некую дополнительную смысловую нагрузку
ассоциации в голове всплывают

Sergey
11.01.2017
18:33:22
точно так же Abstract имеет некую смысловую нагрузку)
которая несет ровно ту же 0-вую ценность

da horsie
11.01.2017
18:33:39
ну не

Sergey
11.01.2017
18:33:44
ну да)

da horsie
11.01.2017
18:34:03
Catalog может быть каталогом кнопок, а может быть каталогом лягушек

Sergey
11.01.2017
18:34:06
ты сразу будешь думать "о репозиторий... доктрина... дата мэппер... запихну туда findProductsWithComments

da horsie
11.01.2017
18:34:22
а ProductRepository понятно что хранит продукты

Sergey
11.01.2017
18:34:42
хотя может и может но тогда "кнопка" это продукт в каталоге)

da horsie
11.01.2017
18:35:02
ну да

James Tiberius Kirk ?
11.01.2017
18:35:27
фронтендом запахло

Sergey
11.01.2017
18:35:33
я это к тому что разработчики думают не в терминах бизнеса
как правило
и это заставляет их обзывать вещи как им удобно

Google

da horsie
11.01.2017
18:35:45

Sergey
11.01.2017
18:35:53

Sergey
11.01.2017
18:36:01
я про подавляющее большинство
и еще большее количество людей обзывая что-то SomethingInterface делают это на автомате
ну то есть их лет 10 назад так научили и они с тех пор так делают
привычка
знаете же эксперемент с обезъянками и бананом?

Sergei
11.01.2017
18:37:11

Admin
ERROR: S client not available

Sergey
11.01.2017
18:37:42
https://dezinfo.net/images3/image/02.2012/obezyan/1003.jpg

Sergey
11.01.2017
18:37:47
Я стараюсь определить оптимальный уровень абстракции для требований бизнеса и на основании этого проектирую уже. Конечно до ddd лично мне далековато, но пока не жалуюсь

Sergey
11.01.2017
18:38:16

Sergey
11.01.2017
18:38:53
И чтобы не получилось 800 уровней наследования
Фаьрик тыщщи, паттерн на паттерне и все такое

finkel
11.01.2017
18:39:44
мой подход не приносит пользы

Sergey
11.01.2017
18:40:15

finkel
11.01.2017
18:40:45
я делаю один огромный метод, а потом думаю как из этого ооп сделать. У всех же так было?)

Google

Sergey
11.01.2017
18:41:10
почитай про функциональную абстракцию
декомпозицию и т.д.
говорят помогает
большая часть проблем у разработчиков от того что они не хотят разбираться с тем что они делают
они сначала делают и потом уже задают вопросы когда "не работает"
потому такие практики как TDD и выдумывают
они заставляют разработчика вникать и разбираться что им нужно сделать...
(воприки мнению что это про тесты)
тесты в этом случае - лишь инструмент заставляющий смотреть на разрабатываемй код с позиции пользователя этого кода (другой программист)
и формировать какие-то критерии приемки и т.д. выстраивать более четкую декомпозицию (потому что с херовой декомпозицией неудобно тесты писать)

finkel
11.01.2017
18:44:21
и правильного мышления это не добавит, просто загонит тебя в рамки, где будет сложно сделать не правильно

Sergey
11.01.2017
18:45:08
но если ты сделаешь это ДО у тебя не будет тратиться время на этот огромный метод
хотя прототипы делать иногда полезно
> и правильного мышления это не добавит, просто загонит тебя в рамки, где будет сложно сделать не правильно
цель этого всего заставить тебя думать ДО того как ты напишешь этот жирый метод)
так с точки зрения времени и трудозатрат эффективнее выходит
1 час на жирный метод, 0.25 часа подумать, 0.5 час тест, 0.5 час реализация
0.25 часа подумать, 0.5 час тест, 0.75 час реализация
что быстрее?

Sergey
11.01.2017
18:47:26

Sergey
11.01.2017
18:47:38
0.25 часа подумать, 1 час реализация, 0.5 часа тест, 0.25 часа рефакторинг кода что бы тесты норм писались, 0.25 часа дописать тесты