Затем настал момент реализовать какое-то достижение в нашем веб-приложении. У меня была идея, более или менее похожая на иерархичность, описанную в этом вопросе How to implement an achievement system in RoR.Достижения рельсов
Приложение, над которым мы работаем, представляет собой программное обеспечение как услугу, предназначенную для управления снаружи без разработчиков программного обеспечения. Дело в том, что администратор программного обеспечения через веб-интерфейс должен создавать новые виды выполнения. Затем иерархичность становится стеной.
Я где-то читал, что эту ситуацию можно реализовать через машины с конечным состоянием, но в настоящее время у меня недостаточно информации об этой теме.
Edit: конкретный вопрос
Я думал о моделировании класс достижение с перечнем условий, которые будут выполнены. Этот базовый класс Достижение имел бы булевое значение, которое рекурсивно проверяет все условия, чтобы они были действительными. Тогда условия могут быть жестко заданными классами. Затем администратор системы создает новые виды достижений с комбинациями атомных состояний .
Мой страх - это растущее число классов для атомных условий. Я не хочу иметь 30+ классов условий в проекте. Любые рекомендации действительно оценены.
Edit: более подробная информация о реализации
От ответа SpyrosP, это кажется хорошая идея, чтобы построить описанный DSL. В некотором смысле достижения должны быть сохранены в базе данных. Сохраняя тот же пример:
comments :less_than => 10
check_comments
comments :more_or_equal => 100
award_hundred_comments_badge
Для того, чтобы создать динамически достижений должна быть таблица, которая хранит состояние (ы) должны быть проверены:
Achievement
| id | name |
| 1 | "Houndred Comments" |
Condition
| achievement_id | expression |
| 1 | some sort of condition |
StackOverflow предназначен для конкретных вопросов программирования с четким ответом. Это довольно субъективно. – Almo
Редактирование вопроса тогда. –