Во-первых, я бы посоветовал вам оставить свой ум открытым для нескольких шаблонов проектирования, пока вы не напишите некоторый код.Позвольте вашему коду сказать вам, какой шаблон будет работать лучше всего.Если вы выберете один из них заранее, вы можете попытаться «заставить» свой код использовать шаблон, который, возможно, был не лучшим вариантом.
С учетом вышесказанного пара шаблонов, которые могут в конечном итоге оказатьсяполезными в вашей ситуации были бы Стратегия и Цепочка ответственности .
Идем дальше ...
Я думаю, вам нужно сделать шаг назад и придумать, что вам нужноцели проектирования основаны на том, как вы ожидаете, что система изменится со временем.Например, кажется, что вы определенно ожидаете добавления новых категорий и сортировок.Исходя из этого, две цели вашего проекта могут быть следующими:
- свести к минимуму изменения кода проверки при добавлении новой сортировки / категории
- свести к минимуму изменения в коде построения URL при добавлении новогоСортировка / Категория
Исходя из этих целей, придумайте общий подход.Например, мои мысли ...
- Если я разделю каждую проверку на отдельный класс, мне не нужно будет изменять существующие алгоритмы проверки при добавлении новой категории / сортировки.Все, что мне нужно сделать, это добавить новый алгоритм проверки или, возможно, удалить существующий, если он больше не применяется.(Это может быть излишним, но я не знаю, насколько сложными или сложными будут ваши алгоритмы проверки)
- Если каждая категория / сортировка знает, как предоставить свой собственный фрагмент URL, каждая новая категория или сортировка должнане влияют на возможность получения представлений URL существующих категорий или сортов.
Теперь вы можете больше думать о реализации (где у вас много вариантов).Например, вы могли бы расширить свои перечисления, чтобы каждое значение уже знало свой компонент url, например, так:
public enum Sort{
New("?sort=new"),
Rising("?sort=rising"),
ThisWeek("?sort=thisweek");
private String urlComponent;
public Sort(String urlComponent) {this.urlComponent = urlComponent;)
public getUrlComponent() {return this.urlComponent;}
}
По этому маршруту вы всегда можете вызвать mySort.getUrlComponent()
, который не нужно менять при добавлении/ удаление значений сортировки.Это конкретно решит вашу вторую проблему.
Я не смогу дать вам наилучшую реализацию или набор шаблонов проектирования, потому что я не знаю всего, что вы делаете с системой, которую вы строите,но я надеюсь, что мои мысли здесь помогут.