У меня есть вопрос относительно дизайна программного обеспечения. Я думаю, что поиск - это хорошо известная проблема, поэтому для ее решения должен быть образец дизайна или сочетание шаблонов. Но я не могу понять это.OO Программное обеспечение для обработки ограничений - какой шаблон дизайна использовать?
Хорошо, это вопрос. Например позволяет сказать, что у меня есть следующие классы и свойства:
CTask
- Имя
- Продолжительность
- TaskArea
CTaskArea
- Имя
CPerson
- Имя
- Способности
CAbility
- Имя
CTool
- Имя
- CleaningTime
CConstraint
- Имя
- Ограничение
CTask, CPerson, CTool могут иметь ограничения, например, Задача А может выполняться только лицами с умением X, или человек А не может выполнять задачи TaskArea X и так далее. Например, когда я создаю новый CTask, CPerson или CTool, я мог бы представить диалоговое окно конфигурации ограничений с dropdwons:
Класс | Оператор | Класс | Недвижимость | Значение
CPerson | НЕ | CTool | Имя | Hammer
Каков наилучший способ создать это, чтобы иметь возможность динамически настраивать ограничения для всех классов, которые могут иметь ограничения? Я начал смотреть на шаблон наблюдателя, чтобы все классы, способные к состязанию, регистрировались, но я думаю, что есть лучшие способы. Как вы думаете?
EDIT: Чтобы быть более точным. Мне бы хотелось избежать того, что CPerson или CTool и т. Д. Содержат информацию друг о друге. Я думаю о чем-то вроде интерфейса ограничения, который должен быть реализован классами, которые могут иметь ограничения.Затем во время выполнения я ищу экземпляры, которые реализовали этот интерфейс, и помещают их в список для дальнейших операций, таких как определение ограничения и т. Д. Когда я впервые подумал о том, как его реализовать, мне было интересно, существует ли уже существующий шаблон дизайна, потому что это казалось такой общей проблемой. К сожалению, я не смог найти тот, который действительно подходит для этой проблемы. Есть идеи?
Заранее благодарен!
Tim
EDIT: Im в настоящее время работает в растворе на основе наследования и им будет разместить его здесь, когда его работы :)
Привет, спасибо за Ваш ответ. Я не знаю, полностью ли это понимаю. Вы имеете в виду, что человек должен знать свойства инструмента и наоборот? – GinSonic
@ user3364279 Это зависит от ваших потребностей. Я просто рекомендовал схему. Вы можете заполнить ограничения из конструктора 'Person' (в этом случае Person будет знать их), или вы можете делегировать эту задачу на какой-то другой класс (например, PersonSetup). –
Hi FractalizeR, можете ли вы дать мне небольшой пример того, как выглядят CPerson и CPersonSetup. И у вас есть представление о том, как может выглядеть интерфейс ограничения? Я могу немного усложнить ситуацию, но им интересно, как будет выглядеть решение проблемы, если мы будем использовать интерфейсы или наследование. Заранее спасибо – GinSonic