Фильтрация репозитория MVVM
-
09-09-2020 - |
Вопрос
У меня есть несколько классов мастер-подробностей, основанные в большой части на Josh Smith's Статья MSDNЕго отличный код, особенно на примере, но оставляет мне интересно, как лучше всего справляться с ситуациями, где вы хотите некоторое подмножество репозитория.
Так что josh имеет класс под названием allcustomersviewmodel, а код что-то вроде:
public AllCustomersViewModel(CustomerRepository customerRepository)
{
if (customerRepository == null) throw new ArgumentNullException("customerRepository");
// Populate the AllCustomers collection with CustomerViewModels.
_allCustomers = _customerRepository
.GetCustomers()
.Select(cust => new CustomerViewModel(cust, _customerRepository))
.ToList();
}
.
Как вы решаете ситуацию, когда вы хотите предпочтенияCustomers, excustomers, localcustomers и т. Д., etc ??
Его код предлагает мне класс ViewModel для каждого, с фильтрацией хранилища жесткокодирования в этом классе.
Или другой способ пройти дополнительный фильтр в просмотру наряду с репозиторием?
Как ваш код решит эту особую проблему?
Кроме того, у кого-нибудь есть ссылки или хорошие примеры, показывающие, как использовать SpeciAFicatePattern или iQueryable, чтобы решить такие проблемы?
ура,
Беррил
Решение
Один вариант (и, возможно, самый чистый) - просто добавить эти методы в CustomerRepository
- E.g.Генеракодицетагкод, генеракодицетагкод и т. Д.
Также вы действительно должны работать от абстракций, поэтому должен пройти генеракодицетагкод к конструктору модели вашего представления.Это определяет код вашего представления о моделей модели от вашего репозитория бетона (в этом случае, который читает из файла XML), и позволяет легко поменять реализации, например,для тестирования подразделения.
Другой вариант, как вы упоминаете, для вашего репозитория выставляют GetPreferredCustomers()
.Если вы рады быть привязаны к IQUERYable, и уверены, что любая реализация доступа к данным будет поддерживать поставщик LINQ, то это обеспечивает хорошую гибкость.Смотрите Здесь для получения дополнительной информации.
Лично я предпочитаю первый вариант, особенно для большего количества приложений на масштабе.