Size: a a a

2019 December 25

КГ

Константин Грачев in PHP
Ты можешь расширить возможности этой фабрики не изменяя код самой фабрики?
источник

КГ

Константин Грачев in PHP
Если нет, то архитектура не гибкая, о чём тебе и написали. нарушение SPR и Open/Close
источник

D

Daniil in PHP
Константин Грачев
Ты можешь расширить возможности этой фабрики не изменяя код самой фабрики?
хорошо как создавать тогда стораджи?
источник

OA

Oleg Arkhipov in PHP
Константин Грачев
Нет чёткого правила 10 плохо, а 9 хорошо. Просто чаще всего это ошибка в проектировании, скорее всего ты складываешь вместе данные, которые вместе хранить не нужно
Разумеется, что нет чёткого. Но, например, а если в энтити накидано зеркально как в таблице в БД много всяких полей, хранящих простую инфу, например? Лень выдумывать пример из конкретной предметной области сейчас. Какая-нибудь инфа о товаре, или книге тем (как в библиотеке), например? Много строк разных, которые потом просто выводить и сортировать/фильтровать по ним. Мне кажется, не так страшно, что они вместе.
источник

AD

Andrey Dembitskyi in PHP
Константин Грачев
Если нет, то архитектура не гибкая, о чём тебе и написали. нарушение SPR и Open/Close
Для фабрик это ок.
источник

OA

Oleg Arkhipov in PHP
Но я бы полностью согласился, если речь бы шла о «10 полях», которые все участвуют в условно сложной логике, например. В т.ч. не у энтити, а у какого-то иного класса, сервиса, и т.д.
источник

КГ

Константин Грачев in PHP
Oleg Arkhipov
Разумеется, что нет чёткого. Но, например, а если в энтити накидано зеркально как в таблице в БД много всяких полей, хранящих простую инфу, например? Лень выдумывать пример из конкретной предметной области сейчас. Какая-нибудь инфа о товаре, или книге тем (как в библиотеке), например? Много строк разных, которые потом просто выводить и сортировать/фильтровать по ним. Мне кажется, не так страшно, что они вместе.
Мы тут вроде проектирование обсуждаем, а ты аргументируешь отзеркаливанием базы
источник

S

SarcasmIO in PHP
Daniil
хорошо как создавать тогда стораджи?
я смотрел только StorageFactory

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

@Preemiere тебе правильно объяснил за SRP/OCP

думаю если бы ты заменил её на, штуку принимающую все реализации StorageInterface в конструктор через !tagged где спецификациями опрашивал какую вернуть, то тебе не пришлось бы изменять старый код, когда ты ввел новый сторедж
источник

D

Daniil in PHP
Константин Грачев
Если нет, то архитектура не гибкая, о чём тебе и написали. нарушение SPR и Open/Close
как по типу стораджа переданому в метод создавать разные типы стораджей без изменения кода
источник

OA

Oleg Arkhipov in PHP
Константин Грачев
Мы тут вроде проектирование обсуждаем, а ты аргументируешь отзеркаливанием базы
Не вижу, чтобы я что-то аргументировал этим.
источник

D

Daniil in PHP
Andrey Dembitskyi
Для фабрик это ок.
я тоже так думаю
источник

S

SarcasmIO in PHP
Daniil
как по типу стораджа переданому в метод создавать разные типы стораджей без изменения кода
$storageResolver->resolve($userInput->type) //an StorageInstance returned
источник

КГ

Константин Грачев in PHP
Oleg Arkhipov
Не вижу, чтобы я что-то аргументировал этим.
Если тебе лень, дальше можно ничего не обсуждать.
Для описанных тобою полей есть EAV
источник

D

Daniil in PHP
SarcasmIO
$storageResolver->resolve($userInput->type) //an StorageInstance returned
ну у тебя в resolve тоже будут if
источник

S

SarcasmIO in PHP
Daniil
ну у тебя в resolve тоже будут if
нет
источник

OA

Oleg Arkhipov in PHP
Константин Грачев
Если тебе лень, дальше можно ничего не обсуждать.
Для описанных тобою полей есть EAV
То есть ты считаешь, что лучше влезать в EAV в таком случае, нежели создать ряд скучных полей, лежащих в одном классе?
источник

S

SarcasmIO in PHP
Daniil
ну у тебя в resolve тоже будут if
там будет итерация по всем реализациям, у каждой из которой я спрошу, ты это умеешь, нет, тогда дальше, и так пока не найду нужную
источник

OA

Oleg Arkhipov in PHP
@oneerror можешь пояснить, что значит «через !tagged»?
источник

А

Антон in PHP
Daniil
ну у тебя в resolve тоже будут if
foreach ($resolvers as $resolver) {
   if ($resolver->supports($storage) {
         $resolver->resolve($type);
   }
}
источник

КГ

Константин Грачев in PHP
SarcasmIO
там будет итерация по всем реализациям, у каждой из которой я спрошу, ты это умеешь, нет, тогда дальше, и так пока не найду нужную
можно хешмап держать, если выбор всегда по одной строке
источник