я могу использовать интерфейс WCF в качестве модели MVVM? - PullRequest
0 голосов
/ 18 ноября 2011

Мое приложение WPF должно получать данные из конвейера через WCF: я новичок в MVVM и не могу понять, куда положить некоторые вещи.Для меня ясно, что такое View, но не ясно, что такое ViewModel и особенно что такое Model в моем случае (в случае, когда задействован WCF). Вопросы:

  • , что такое Model?Нужен ли специальный класс для представления модели?Или модель является приложением сервера WCF?Что является действительным worflow "Приложение WCF-сервера ---- именованный канал -----> ViewModel <- Привязка данных -> Просмотр" или "Приложение-сервер WCF ---- именованныйpipe -----> Model <---> ViewModel <- Привязка данных -> Просмотр "
  • как выполнить рефакторинг кода ниже?куда положить всю эту инициализацию?в ViewModel?в класс модели (если он мне нужен), в специальный класс «инициализации»?

    public MainWindow()
    {
    ChannelFactory<IManagementConsole> pipeFactory =
    new ChannelFactory<IManagementConsole>(
        new NetNamedPipeBinding(),
        new EndpointAddress(
            "net.pipe://localhost/PipeMBClientManagementConsole"));
    
        IManagementConsole pipeProxy =
          pipeFactory.CreateChannel();
    
        List<ConsoleData> datas = new List<ConsoleData>();
        foreach (StrategyDescriptor sd in pipeProxy.GetStrategies())
        {
            datas.Add(pipeProxy.GetData(sd.Id));
        }
        this.DataContext = datas;
    }
    

Могу ли я предположить, что это моя модель MVVM?:

[ServiceContract]
public interface IManagementConsole
{
    [OperationContract]
    ConsoleData GetData(int strategyId);

    [OperationContract]
    List<StrategyDescriptor> GetStrategies();
}

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

Модель - это класс, который описывает данные из внутреннего источника данных. Они могут быть фактическими классами из источника (например, EF или WCF-прокси) или могут быть простыми DTO. Это действительно зависит от ваших предпочтений.

ViewModel - это класс, который описывает данные для отображения в представлении. Часто, но не обязательно, данные поступают из классов Model.

ViewModel отвечает за управление классами модели: предоставление их информации представлению и выполнение действий с ними на основе входных данных представления. При этом я предпочитаю не видеть фактическую работу связи во ViewModel. Вместо этого я абстрагирую коммуникации на другой уровень (я называю свой уровень Service, но в этом контексте это может сбить с толку).

По сути, у меня ViewModel делает запросы к уровню Service, который связывается с бэкэндом для извлечения / создания объектов Model, которые затем возвращаются в ViewModel. Это усложняется, если сервисные вызовы асинхронны, но все еще могут быть выполнены.

Для простого примера скачайте пример кода с Practicalmvvm.com .

1 голос
/ 18 ноября 2011

Вы можете использовать клиент службы WCF в качестве модели MVVM. Однако часто создается реальный класс Model, который затем использует службы WCF, поскольку часто не существует ни одной службы WCF для одного View и / или ViewModel.

Например:

public class MyModel
{
    IUsersService usersSrv;
    ICompaniesService compSrv;

    public MyModel(IUsersService usersSrv, ICompaniesService compSrv)
    {
        this.usersSrv = usersSrv;
        this.compSrv = compSrv;
    }

    public string GetUserAndCompanyName()
    {
        return usersSrv.GetUserName() + " belongs to " + compSrv.GetCompanyName();
    }
}

Другими словами, ваша Модель обычно будет содержать участников, которые соответствуют вашему View, тогда как ваши службы WCF обычно содержат участников, которые логически объединяются.

1 голос
/ 18 ноября 2011

Могу ли я предположить, что этот [IManagementConsole] является моей моделью MVVM? :

Да, это (может быть) Модель. Но очень маловероятно, что его можно использовать как ViewModel.

ViewModel «оборачивает» модель и делает ее подходящей для поддержки UI-контента и UI-логики.

В вашем случае вам понадобятся class ManagementConsoleViewModel и class StrategyDescriptorViewModel.

ViewModels реализует INotifyPropertyChanged и может предоставлять команды и дополнительные свойства для привязки данных.

Лучше всего взглянуть на некоторые базовые примеры MVVM (это действительно очень просто, просто добавьте классы BaseViewModel и RelayCommand в ваш проект), а затем выбрать (небольшую) платформу. Как Caliburn-микро или MVVM-свет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...