gelik-vani
Новичок
Всем привет,
вопрос немного нестандартыный даже скажем с заходом в оффтоп.
Входные данные: Нужно написать 2 Генератора и 2 Фильтра.
Условия генераторов (а)
1) возвращает стринг [A-z09]{10}, (10смволов буквы+цифры)
2) возвращает массив из 10 элементов [A-z09]{10},
Условия фильтров (б)
1) Оставляет только цифры
1) Оставляет все кроме цифр
Как видим пример специально подобран максимально простой, чтобы на него не отвлекаться, а перейти к сути:
Вот как это все лучше скомпоновать, чтобы потом безболезненно наращивать и генераторы и фильтры, и максимально абстрагироваться от передаваемых типов
Чтобы выразить свои мысли обозначу классы заранее (ничего конкретно не значат, просто первое что пришло в голову)
а1 - StringGenerator
a2 - ArrayGenerator
б1 - DigitFilter
б2 - CharFilter
Первый уровень абстракции, надо отделить string от array чтобы не дублировать для каждого типа фильтры? Что на ум приходит? Что оба Generator могли бы возвращать array, просто первый возвращает массив с 1 элементом, и тогда уже любой фильтр принимает массив и не парится что там под низом. Вроде как абстракция? Абстракция! Генераторы клепать можем дальше. Фильтра тоже клепаем сколько хотим.
Второй уровень абстракции, а что если мы захотим сделать какой нибудь ArrayCollectionGenerator (или любой другой класс как носитель), который возвращает ArrayCollection (да я знаю что его можно быстро конвернтуть в array, но давайте для чистоты эксперимента забудем что там есть toArray()) чтобы потом в коде где-то использовать $collection->filter();
Тогда вроде как логично добавить прослойку для "array" и ArrayCollection, что-то вроде HeapCollection (тоже особо ничего не значит и с Heap общего не имеет ), где будут методы типа next(), set(), echo(), getRaw(), или даже сделать HeapCollectionInterface, чтобы имеенно им перекидываться между DigitFilter\CharFilter, чтобы они не знали какой конкретный класс перед ними, и пользовались только методами для итерации данных.
Собственно вопрос в чем, тупиковый ли у меня ход или так оно и должно быть?
вопрос немного нестандартыный даже скажем с заходом в оффтоп.
Входные данные: Нужно написать 2 Генератора и 2 Фильтра.
Условия генераторов (а)
1) возвращает стринг [A-z09]{10}, (10смволов буквы+цифры)
2) возвращает массив из 10 элементов [A-z09]{10},
Условия фильтров (б)
1) Оставляет только цифры
1) Оставляет все кроме цифр
Как видим пример специально подобран максимально простой, чтобы на него не отвлекаться, а перейти к сути:
Вот как это все лучше скомпоновать, чтобы потом безболезненно наращивать и генераторы и фильтры, и максимально абстрагироваться от передаваемых типов
Чтобы выразить свои мысли обозначу классы заранее (ничего конкретно не значат, просто первое что пришло в голову)
а1 - StringGenerator
a2 - ArrayGenerator
б1 - DigitFilter
б2 - CharFilter
Первый уровень абстракции, надо отделить string от array чтобы не дублировать для каждого типа фильтры? Что на ум приходит? Что оба Generator могли бы возвращать array, просто первый возвращает массив с 1 элементом, и тогда уже любой фильтр принимает массив и не парится что там под низом. Вроде как абстракция? Абстракция! Генераторы клепать можем дальше. Фильтра тоже клепаем сколько хотим.
Второй уровень абстракции, а что если мы захотим сделать какой нибудь ArrayCollectionGenerator (или любой другой класс как носитель), который возвращает ArrayCollection (да я знаю что его можно быстро конвернтуть в array, но давайте для чистоты эксперимента забудем что там есть toArray()) чтобы потом в коде где-то использовать $collection->filter();
Тогда вроде как логично добавить прослойку для "array" и ArrayCollection, что-то вроде HeapCollection (тоже особо ничего не значит и с Heap общего не имеет ), где будут методы типа next(), set(), echo(), getRaw(), или даже сделать HeapCollectionInterface, чтобы имеенно им перекидываться между DigitFilter\CharFilter, чтобы они не знали какой конкретный класс перед ними, и пользовались только методами для итерации данных.
Собственно вопрос в чем, тупиковый ли у меня ход или так оно и должно быть?