|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
||||||
Гибкая архитектура и порождающие паттерны28.09.2013, 19:55. Показов 1843. Ответов 10
Метки нет (Все метки)
У меня возник вопрос следующего характера.
Предположим, что есть некоторый интерфейсный класс фильтра, есть реализации, наследованные от него, есть класс - контейнер, который умеет регистрировать в себе фильтры и последовательно их применять и вычислять конечный результат по логическому или. И есть класс - кусок MVC паттерна проектирования, который зарегестрированный контейнер с фильтрами уже умеет использовать для отображения отфильтрованных данных. Эта система является высоко гибкой, открытой для расширения, масштабируемой, но эта гибкость и абстрактность - вызывает у меня проблемы, когда я хочу ей воспользоваться. А именно, для того что-бы конкретизировать свои намерения в использовании фильтров я должен написать в коде что-то вроде: Кликните здесь для просмотра всего текста
В чём суть проблемы - во-первых, допустим у меня 5 мест в коде где я хочу использовать мою наизамечательнейшую систему демонстрации фильтрованных данных, но в одном случае нужно фильтровать одними фильтрами, по правилу .txt в другом - другими - по другому правилу... А этот код приходится вызывать целиком. Во-вторых, я не могу в рантайме взять и подменить этот самый способ - всё инстанцирование уже захардкожено, и его нельзя будет изменить. В-третьих я жескто связываю "пользовательский" код - со всеми реализациями - т.е. заставляю пользователя инклюдить все хедеры, всех инстанцируемых сущностей, будь то фильтры, контейнер фильтров, или часть MVC. Но, при этом, только пользовательский код знает наверняка что нужны именно фильтры по типу, с тонкой настройкой ввиде ".txt" формата. Отсюда возникает вопрос, каким образом построить систему инстанцирования фильтров, и контейнера фильтрации - так, что-бы с одной стороны - она так-же была гибкой, расширяемой, независимой от реализации, но при этом позволяла на стороне пользователя однозначно задавать и настраивать фильтры. Я бы очень хотел услышать ответы в коде, либо в терминологии применения паттернов проектирования, с некоторыми комментариями к заданой конкретике. Заранее спасибо.
0
|
||||||
| 28.09.2013, 19:55 | |
|
Ответы с готовыми решениями:
10
Порождающие паттерны
Архитектура Hibernate VS Паттерны (проектируем вместе:) |
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
||
| 28.09.2013, 23:36 [ТС] | ||
|
0
|
||
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
|
| 29.09.2013, 13:04 [ТС] | |
|
Только пользователь вкурсе, что ему нужно. В одном случае - ему нужен инстанс new FileTypeFilter, с переданным в него ( или с переданным посредством вызова метода - расширением - например .txt) После того как этот инстанс был создан и настроен - он уже не нужен пользователю как FileTypeFilter - а нужен как простая абстрация над фильтрами - FilterInterface - что-бы просто зарегестрировать его в контейнере с фильтрами. Когда он захочет себе контейнер с фильтрами - он может захотеть, что-бы результаты фильтрации применялись по логическому или - т.е если хотя-бы 1 фильтр сказал что объект надо отфильтровать - тогда в конечном счете объект будет отфильтрован. И в этом случае ему нужно создать инстанс new OrFilterContainer и только потом с ним начинать работать, если же пользователю нужно поведение, когда объект отфильтровывается только если все фильтры сказали, что объект нужно отфильтровать - тогда ему нужен инстанс типа new AndFilterContainer. Дальше конкретика пользователю опять не нужна, а нужен только FilterContainerInterface - для дальнейшей регистрации.
Добавлено через 7 минут Мы можем свести всю задачу к одним только фильтрам - к нижнему уровню: проблема в чём - до того как фильтр будет настроен - он нужен именно как конкретный объект - FileTypeFilter, UserFileFilter, SomeMagicFilter - поскольку только в конкретных классах определены методы "тонкой настройки" для этих фильтров. FileTypeFilter - надо настроить передав ему char * массив - указывающий на то какое рассширение надо фильтровать. У него определен метод типа SetFileType. А вот на уровне общего интерфейса - FilterInterface - таких методов уже нет, и через него настроить ничего не получится. Насколько я знаю - класс абстрактная фабрики ничего не знает о своих конкретных реализациях. Т.е класс абстрактной фабрики не может содержать методы передатчики информации - необходимой для правильной инициализации фильтров. Тогда поидее остаются только классы конкретных фабрик, получается - что в классе конкретной фабрики - нужно определеть методы настройки для конкретного типа продукта, которому соответствует эта фабрика? Но как это впринципе решит проблему? Т.е. да, пользовательский код будет связан с классами фабрики и абстрактной фабрики - а не конкретной реализации фильтра, но в целом разве это решает задачу? Добавлено через 4 минуты Поскольку проблема для меня достаточно животрепещущая, сейчас красочные плакаты подготовлю...
0
|
|
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||||||
| 29.09.2013, 13:16 | ||||||
|
Melg, может как-нибудь так?
0
|
||||||
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
||
| 29.09.2013, 13:24 [ТС] | ||
|
0
|
||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||||||
| 29.09.2013, 14:43 | ||||||
|
Melg, create_filter - обычная фабрика, конструктор по умолчанию. set_property примерно так
Не по теме: Кстати, вообще нужно ли подобное? Можно отвязаться от конкретного типа фильтра в коде, но пользователь всё равно ведь должен знать, какой фильтр создать и как его проинициализировать - т.е. тот же тип фильтра по сути.
0
|
||||||
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
|
| 29.09.2013, 14:52 [ТС] | |
|
Я забыл в данном случае указать - использовать boost не разрешено. Да - пользователь должен знать то, какой фильтр ему нужен (т.е логический способ фильтрации, и исходные данные для данного способа) но он далеко не обязательно должен знать как выглядит класс, реализующий этот способ фильтрации. Иначе это уже программирование на уровне рализации.
0
|
|
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||
| 29.09.2013, 15:03 | ||
|
0
|
||
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
|
| 29.09.2013, 19:35 [ТС] | |
|
Если у кого-то есть альтернативные предложения по поводу решения задачи - проблема всё еще считается актуальной.
0
|
|
| 29.09.2013, 19:35 | |
|
Помогаю со студенческими работами здесь
11
Архитектура и паттерны для разработки ADO.Net сервера В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников Порождающие полиномы для м-последовательностей Порождающие полиномы циклических кодов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|