Это правда, что они говорят о шаблонах проектирования, что они являются просто воплощением техник, уже широко используемых. Я использую шаблон активной записи с 1985 года.
Одним из атрибутов этого шаблона является использование статических элементов в реализации для выполнения поиска, который возвращает коллекции базовых данных.
class Customer {
static Customer FindCustomerById( int Id ) { ... }
static Customer[] FindActiveCustomers() { ... }
}
Во многих случаях, когда мне нужна большая гибкость, я нарушаю инкапсуляцию и включаю такой метод, как
static Customer[] FindCustomers( string criteria ) { ... }
, где его можно назвать
Customer[] customers = Customer.FindCustomers( "LastName = 'Smith'" );
Конечно, это откладывание, когда я использовал этот шаблон в C, это явно не лучшая практика, и в неправильных руках это может привести к внедрению SQL и другим проблемам.
Существует ли подходящий шаблон или практика, которая могла бы позволить классу Customer стать «критерием» для такого поиска?
Например, предположим, что я хочу найти клиентов, чья фамилия была Смит, я мог бы написать такую реализацию, как:
static Customer[] FindCustomers( Customer customer ) { ... }
должен вызываться как (с соответствующим конструктором, конечно):
Customer[] customersnamedsmith =
Customer.FindCustomer( new Customer( "Smith" ) );
Или лучше создать совместный класс, который бы определял критерии?