Как viewmodels должны общаться с репозиториями? - PullRequest
5 голосов
/ 15 февраля 2011

Я получил кучу хранилищ.Они получают данные из сгенерированной модели EF 3.5.Для простоты давайте просто назовем их repository1,2 и 3. Все они реализуют общий интерфейс: public interface IRepository<T>{..} Как мои view-модели взаимодействуют с этими хранилищами?Я пытался создать какую-то фабрику с IRepository GetRepository(string repositoryName){..} методом, но я не смог заставить его работать.Так что я должен просто ссылаться на репозитории в моделях представления, когда это необходимо, или есть лучшее решение для этого?Я бы предпочел пример кода, спасибо.

ура

Ответы [ 4 ]

1 голос
/ 16 февраля 2011

В этих ответах и бесплатной вводной главе из Внедрение зависимостей в .NET рекомендуется отделить репозитории и пользовательский интерфейс от businesslogic. Зависимости должны сходиться с основной логикой так:

dal / repositories -> Businesslayer, Models и IRepository <- UI </p>

Мне также было интересно, где ViewModels вписываются в это. Определенно, они вообще не должны быть связаны с репозиториями, но вопрос о том, принадлежат ли ViewModel к бизнес-уровню (сервисному уровню) или с пользовательским интерфейсом, представляется спорным. Я просто смотрю на asp.net mvc и в настоящее время предпочитаю размещать их на уровне бизнеса, чтобы упростить работу контроллеров. Также кажется разумным, что бизнес-уровень собирает элементы из различных репозиториев, которые логически связаны друг с другом, и что они выполняются вместе через ViewModel. Может быть, как транзакция, чтобы обновления во всех хранилищах были успешными или откатывались.

0 голосов
/ 19 февраля 2011

Вы можете найти BookLibrary пример приложения WPF Application Framework (WAF) . Он использует Entity Framework вместе с MVVM. Но в нем нет репозитория для работы с Entity Framework.

0 голосов
/ 17 февраля 2011

Я не могу вспомнить ситуацию, когда ваша модель представления НИКОГДА не будет взаимодействовать с вашим хранилищем. Модель представления должна быть плоской моделью для использования Клиентом.

Что именно вы пытаетесь сделать?

0 голосов
/ 15 февраля 2011

Репозиторий обслуживает до Т.Что я сделал, так это добавил статическое свойство к моим T, чтобы получить репозиторий через IOC:

public class Part // This is one kind of T
{
    public static IRepository<Part> Repository { get { return IoC.GetInstance<IRepository<Part>>(); } }
    ...
}

, тогда, когда мне понадобится деталь ...

var part = Part.Repository.Find(id);

Для моего подразделенияТестирование IoC обслуживает фиктивные репозитории.В производстве настоящая вещь.

...