Должны ли вещи Search Helper быть функциями или классом
В требовании "Моя страница поиска" мне нужно выполнить следующую операцию.
Текст пользовательского поиска
(пример 20к + мобильные телефоны + самсунг)Заказ поисковых уточнений
(для конкретного пользователя: уточнение в порядке "цена, компания, доставка", а для некоторых других это может быть "доставка, цена, компания". Этот класс будет обрабатывать это)Релаксация некоторых параметров при меньших результатах.
(Если по какой-то логике результаты будут меньше (скажем, слегка изменятся в ценовом диапазоне), то будет применено увеличение числа результатов).Кэширование результатов поиска
(кеширование результатов поиска)
для этих операций я создал отдельный класс. Я хочу знать, правильно ли создать класс для этого или создать функцию в некотором общем классе функций поиска, скажем, "seacrhUtility" должно быть достаточно.
2 ответа
Так как один из тегов ваших вопросов - ООП, а один из твердых принципов ООП - это принцип Единой ответственности, возможно, стоит попробовать следовать СРП.
Ключевым моментом SRP является то, что "ответственность" определяется как "причина для изменения".
Из того, что вы описываете, четыре точки звучат так, как будто все они могут изменяться независимо друг от друга, поэтому у вас может быть класс, реализующий каждый.
В зависимости от точных деталей, вы, возможно, захотите выполнить фактический поиск и упорядочение только в одном классе, так как эти два, вероятно, могут рассматриваться как одна "ответственность".
Расслабление параметров звучит как нечто, что не имеет прямого отношения к операции поиска и может измениться и превратиться в нечто довольно сложное. Вероятно, это должно быть разработано как отдельный класс, возможно, даже как класс Стратегии.
Теперь кэширование определенно должно быть реализовано как отдельный класс, так как это совершенно другая ответственность. Учтите, что вам, возможно, придется изменить способ кеширования или место кеширования результатов, и вам не нужно касаться алгоритма поиска для этого.
С другой стороны, если ваше приложение относительно простое и не нуждается в изменении, и если вы можете реализовать все четыре пункта в четырех функциях, каждая из которых содержит менее 4-5 строк кода - вам, вероятно, следует это сделать. Также, если остальная часть вашего проекта построена с использованием только функций или с использованием монолитных объектов, возможно, лучше придерживаться этого подхода. Используй здравый смысл.
Использование класса для этого тоже здорово, но лично я бы просто использовал функцию, все ваши потребности можно было бы передать в виде нескольких параметров функции, и функция вернет вам окончательно выбранные записи после нескольких статических операций, вот и все.
Я буду использовать классы, когда мне нужно выполнить несколько действий в разное время (разные части моего кода) на моем входе или когда будет много кодов или функций, которые будут использоваться...