Есть ли MVC или другой хороший фреймворк от Microsoft для оконных форм? - PullRequest
1 голос
/ 13 января 2010

Есть ли что-нибудь, что помогает обеспечить структуру для хорошего разделения проблем в толстом клиенте или приложении умного клиента, как asp.net mvc для веб?

Ответы [ 5 ]

3 голосов
/ 13 января 2010

Для WinForms я не знаю ни одного такого фреймворка (хотя он, вероятно, должен существовать). Но если вы готовы перейти на WPF, то шаблон MVVM - это именно то, что вам нужно, и есть много платформ, облегчающих вашу жизнь с помощью этого шаблона.

Вы можете найти список фреймворков MVVM в блоге Джереми Аллеса и даже матрицу сравнения

2 голосов
/ 13 января 2010

MVC - это просто шаблон, и его можно легко реализовать без какой-либо инфраструктуры. Это в основном диктует Отделение Концерна [SoC] в том, что касается Gui и бизнес-функциональности. Я бы также рекомендовал вам поискать Model-View-Presenter [MVP] и Model-View-ViewModel [MVVM] - небольшие вариации MVC. MVVM более распространен, чем строгий MVC.

Ах, кроме этого, есть несколько активаторов MVC, таких как Inversion of Control [IoC] и Dependency Injection [DI]. Эти шаблоны облегчают создание и автоматизируют «разводку» ваших компонентов MVC, чтобы они могли взаимодействовать друг с другом. В этом отношении вы можете взглянуть на ObjectBuilder от Microsoft [если он нацелен на .Net 2.0] или покататься с гораздо более легким контейнером Unity, если вы хотите что-то более новое. Лично я предпочитаю контейнер Castle Windsor для всей моей работы с IoC, но Unity созревает, и я могу скоро переключиться.

Конечно, вы также можете взглянуть на фреймворки, частью которых являются эти компоненты, а именно, Composite Application Block [CAB] или Prism соответственно, но я бы не советовал. Они предлагают несколько изящных решений [вы можете эмулировать «Команды» в WinForms с помощью EventCroker от CAB], но если у вас нет особых требований, это лишний багаж, иммо.

Если вы понимаете шаблон [MVC], то шаблон в значительной степени не нужен.


Если вам интересно, как эти кусочки собираются вместе, быстрый курс MVC:

// this is the controller. manages business logic, handles
// Gui inputs
public class Controller
{

    // constructor
    public Controller (View view, Model model) 
    {

        // nothing magical about wiring things up
        // obtain reference through ctor here, and
        // hook up events, or provide bindings

        // attach event handler - obviously make sure
        // signatures match etc, i'm winging this whole thing
        view.ButtonSubmit.Click += Submit;

        // understand this will set the value of view's
        // text once, here on instantiation. the problem
        // with WinForms is databinding, you will have to
        // roll your own. to provide proper databinding
        // Model class must expose events when they change
        // and then Controller or View must listen to event
        // and bind new value to View
        view.TextBox.Text = model.Count;

    }

    // Submit button clicked!
    public void Submit () { ... }

}

// this is the model. contains all data relevant
// to Gui component
public class Model
{
    // a count of stuff
    public int Count { get; set; }
}

// this is the view. simple WinForms object,
// contains buttons, white fluffy clouds, and other
// good stuff
public class View : Control
{
    public TextBox TextBoxCount;
    public Button ButtonSubmit;
}

public static class Program
{
    static void Main ()
    {
        // you can do this explicitly like below, or implicitly
        // if you configure and use an IoC container.
        View view = new View ();
        Model model = new Model ();
        Controller controller = new Controller (view, model);
    }
}

Основной недостаток MVC + WinForms выше в Контроллере. Контроллер напрямую ссылается на объекты WinForms, что делает большинство сценариев сложным для модульного тестирования. То, что вы хотели бы, это абстракция от элементов Gui и событий, которые они бросают. Кроме того, вы не хотите выполнять задачу связывания повторяющихся данных, на которую я намекаю встроенным комментарием. WPF решает их, вводя команды и привязку данных.

1 голос
/ 13 января 2010

В этой SO ссылке обсуждаются некоторые полезные WPF-фреймворки, некоторые из MS.

1 голос
/ 13 января 2010

Возможно, стоит взглянуть на Smart Client Software Factory . Большая часть внимания была сосредоточена на составных приложениях, но он использует представления , и я думаю, что шаблон MVP.

Для WPF или Silverlight взгляните на Prism .

1 голос
/ 13 января 2010

В отличие от WinForms, WPF Toolkit от Codeplex содержит шаблон приложения для просмотра моделей для Visual Studio.

Эта статья MSDN о шаблонах также содержит загружаемый контент, который может быть полезен.

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