Почему DataSourceSelectArguments запечатан?

Кто-нибудь знает логику запечатывания DataSourceSelectArguments?

Я реализовал настраиваемый источник данных (и связанные классы) для некоторых настраиваемых бизнес-объектов и настраиваемых элементов управления Web. Обдумывая фильтры (например, сетку), я обнаружил, что DataSourceSelectArguments запечатан. Конечно, я что-то упускаю. (Может быть, логика связана с тем, что бессмысленно снова спрашивать БД, просто для фильтрации? Просто предположение.)

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 059
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я предполагаю, потому что класс - это тупой объект передачи данных, который просто используется для передачи аргументов методу.

В самом этом классе нет определенных операций, поэтому какой полиморфизм вы ожидаете? Например, существующие методы будут знать только о свойствах этого класса, которые можно установить, поэтому нет необходимости переопределять свойства. Если вы добавите новые свойства, они будут проигнорированы.

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

Извините за задержку, я был в праздничные дни. :)

Проблема в том, что DataBoundControl, например ListView, имеет свойство SortExpression, но не FilterExpression. Можно реализовать сортируемую сетку / список с ListView с помощью IButtonControl WebControl, который запускает PostBack и событие Command. Затем вы используете SortExpression или метод Sort и передаете выражение сортировки, которое заполнит DataSourceSelectArguments.SortExpression, и передайте его в DataSource, который может создать соответствующий оператор SQL (в моем случае) для извлечения данных из БД. Это позволяет разделить данные и WebControl, который их отображает, IMHO.

Следуя этому шаблону, я собирался реализовать фильтр, заполнив дополнительный объект параметра в моем DataSourceSelectArguments запрошенным фильтром, и я вызвал бы Sort, который передал бы этот объект аргументов в DataSource, где я бы создал подходящее предложение select .

Я наконец решил это, "закодировав" информацию о фильтре в SortExpression, но я нахожу это некрасивым (в первую очередь для названия: sort! = Filter), и мне было интересно, есть ли более подходящий способ сделать это или если мне не хватает чего-то более тонкого.

Редактировать:

Возможно, лучшим подходом было бы переопределить метод ListViewPerformSelect и спросить мою собственную реализацию DataSourceView, может ли он фильтровать, а затем вызвать специальный метод ExecuteSelect, который принимает специальный DataSourceSelectArguments с объектом фильтра. Разумеется, будьте осторожны, чтобы не сделать ничего, что может сломаться, когда кто-то использует пользовательский ListView с не расширенным DataSourceView.

Другие вопросы по теме