Проблема реализации значков - PullRequest
2 голосов
/ 29 января 2011

Я разрабатываю веб-сайт с использованием JSF + EJBS + JPA и т. Д. JAVA EE 6 для подведения итогов.

Вы можете создать статью, и со временем, если она удовлетворяет определенным условиям (скажем, 1000 просмотров), этонагражден знаком «1000 просмотров».

Проблема возникает, когда я хочу динамически создавать новые значки.У меня есть класс сущности значка, и все значки извлекаются из базы данных.Как я могу динамически установить условия для значка, присуждаемого статье, поскольку поведение зависит от каждого экземпляра, а не от его типа?

Например, бизнес-логика для оценки требований к встрече для значка «1000 просмотров»»очень отличается от того, что использовалось в« статье с лучшим рейтингом недели »и т. д. Кроме того, что, если количество значков растет?

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

Есть мысли о том, как бы вы это реализовали?

1 Ответ

2 голосов
/ 29 января 2011

Реализация @Singleton, у которого есть метод, запускаемый один раз в период (один раз в час или в течение 24 часов). Он будет иметь коллекцию классов, чтобы проверить сообщения для некоторых условий. Если вы хотите новый значок, просто добавьте класс.

@Singleton
public class Watchdog implements Serializable {
    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = 1L;

    /** The em. */
    @PersistenceContext
    private EntityManager em;

    private List<PostChecker> checkers = new ArrayList<PostChecker>();

    @PostConstruct
    public void init() {
      checkers.add(new ThousandViewChecker());
      checkers.add(new PopularPostChecker());
      ....


    }

    @Schedule(...)
    public void monitor() {
       for (PostChecker checker : checkers) {
          checker.check(em);
       }        
    }

}

Если вы не хотите добавлять класс каждый раз, создайте некоторый xml-файл с правилами присуждения значков и создайте фабрику шашек, которая будет создавать свои правила для значков, используя эти xml-файлы. Затем, чтобы добавить значок, вам нужно будет просто добавить xml.

...