Ashfaque Hussain Ответов: 1

Шаблон проектирования для легкого расширения критериев поиска


Какой шаблон дизайна следует использовать для критериев поиска.

Например, поиск по имени, идентификатору...и в будущем мы можем легко расширить его также с помощью DOB

Что я уже пробовал:

Заводская модель дизайна, но не может этого сделать. Я новичок в дизайне паттерна, только сейчас начал его реализовывать.

Tomas Takac

Я верю, что вы ищете шаблон спецификации[^Но это действительно зависит от того, чего вы пытаетесь достичь. Возможно, вы опубликуете свой код (через Улучшить вопрос) чтобы проиллюстрировать проблему, вы бы прояснили ситуацию, и вы могли бы получить более конкретный ответ.

Ashfaque Hussain

Допустим, мы ввели два критерия поиска-имя и фамилию. И я написал класс для поиска по имени. В будущем, если я захочу добавить еще один критерий для поиска по дате рождения. В этом сценарии какой шаблон проектирования следует использовать.

Ziee-M

Нет необходимости в шаблоне проектирования, просто используйте класс для критериев поиска, вы можете расширить свойства этого класса позже : Method(SearchCriteria searchCriteria)

Ashfaque Hussain

Спасибо, Зи, не могли бы вы объяснить подробнее?

1 Ответов

Рейтинг:
9

Ziee-M

Привет и извините за поздний ответ,

Использование классов критериев сдвига обычно используется в проектах prjects.
Для каждого объекта доступа к данным можно создать класс поиска.
Вот небольшой пример :

public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Adress { get; set; }
        public DateTime BirthDate { get; set; }
    }
    public class SearchPerson
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Adress { get; set; }
        public int Age { get; set; }
    }

    public class PersonDal
    {
        public Person GetPersonById(SearchPerson searchCriteria)
        {
            //Logic to get a  Person based on Id
        }
        public List<Person> GetListPersonByAge(SearchPerson searchCriteria)
        {
            //Logic to get a List of Person based on Age
        }
    }

//use 
PersonDal pDal = new  PersonDal ();
Person person1 = pDal.GetPersonById(new SearchPerson{Id = 5});
List<Person> personList = pDal.GetListPersonByAge(new SearchPerson{Age = 20});

Затем вы можете добавить свойства в свой класс поиска, не изменяя никакого старого кода.

АФЕРЫ :
Как правило, вы будете использовать только несколько полей/реквизитов SearchClass, чтобы знать точный реквизит для заполнения, вы должны каждый раз возвращаться и проверять код, вот почему именование методов действительно важно, это помогает выяснить, какие поля использовать.

Больше :
Вы можете подумать о классе BaseSearchCriteria для общей функциональности...

Надеюсь, это поможет.