2012-05-01 3 views
2

У меня есть путь обработки сигналов, сделанный из многих классов. Каждый класс обработки представляет собой состав меньших классов, каждый из которых имеет свои собственные параметры.Есть ли рекомендуемый шаблон проектирования для передачи параметров с процессом?

До сих пор я ленился и сохранил все параметры обработки в отдельном классе параметров. Я сделал это friend всех классов обработки, чтобы они могли напрямую обращаться к своим членам данных. Однако это обеспечивает очень сильную связь между отдельными блоками и классом параметров, что делает дизайн полностью негибким.

Я перепроектирую код, чтобы каждый небольшой процесс владел своими собственными частями данных, которые ему нужны, чтобы функционировать для уменьшения связи. Но теперь, если новый набор параметров загружен, мне нужен сложный метод, который устанавливает все параметры (используя функции доступа) в каждом из отдельных блоков обработки. Команды в этом методе будут тесно связаны с процессом. Как свести к минимуму эту связь?

ответ

1

Я предлагаю нечто похожее на Context Pattern. При построении ваших процессов загружайте их с помощью объекта контекста или объектов (у вас может быть множество контекстов для различных процессов). Затем каждый процесс запрашивает и извлекает необходимые параметры из заданного объекта контекста. Таким образом, вы полностью переносите ответственность за настройку параметров процесса на эти процессы. Другими словами, процесс знает, какие параметры ему нужны, поэтому процесс может запрашивать их у заданного объекта контекста и напрямую устанавливать его конфиденциально сохраненные элементы.

Обратите внимание, что существуют различные варианты шаблона контекста, как правило, это довольно гибкая концепция.

+0

Звучит здорово. Скажем, что значения в объекте контекста должны были измениться после того, как были построены процессы. Как я могу позволить отдельным процессам обновлять себя в соответствии с новыми значениями? – learnvst

+0

Вот что у меня есть до сих пор FYI: http://stackoverflow.com/questions/10401321/does-this-implementation-of-the-context-pattern-look-ok – learnvst

+1

@learnvst. Вы можете подписаться на процессы (монитор) в контекст (издатель), поэтому они автоматически уведомляются контекстом в случае любого изменения контекста. См. Http://en.wikipedia.org/wiki/Observer_pattern. Вы можете отделить обязанности издателя/подписчика от самого контекста, но это может быть сложнее. – mloskot

1

Вы можете разработать общий контекст (с ключом/значениями на карте) или конкретные контексты, которые наследуются от SpecificContextBase, которые будут иметь параметры, общие для всех процессов.

PROs of GenericContext - это то, что вам не нужно изменять его для добавления/удаления параметров, но CON - это затраты на поиск для доступа к каждому параметру.

PROs of SpecificContext: нет никаких затрат на поиск для доступа к параметрам, но CON - это модификации для добавления/удаления параметров. По крайней мере, с этой опцией вам нужно только изменить конкретный класс контекста, специфичный для одного процесса, который не должен влиять ни на что другое.

Смежные вопросы