.NET MVC: Как создать форму из контроллера? - PullRequest
0 голосов
/ 26 января 2009

В .NET 3.5 winforms я создал MVC. Я хотел бы взять часть контроллера и поместить ее в отдельную сборку, чтобы он не знал представления. Мое приложение использует пять форм в своем представлении. Контроллер заботится об инициализации форм в разное время, что означает, что у контроллера есть ссылка на представление (что я бы предпочел не делать). Это означает, что контроллер не может быть разделен, так как он должен знать типы создаваемых форм, что, вероятно, означает, что он не является настоящим контроллером.

Ответы [ 3 ]

2 голосов
/ 26 января 2009

Я использую Контейнер IOC, чтобы разрешить представление и внедрить экземпляр контроллера через конструктор формы, вот так.

public class MainWindowController : WindowController<IMainWindowView>
{
}

public class WindowController<TView> where TView : IView
{
    public WindowController( IViewFactory factory ) {}

    public void ShowWindow() {}
    public void CloseWindow() {}
}

public interface IViewFactory
{
    IView CreateWithController( IWindowController controller ) {}
}

public interface IView {}
public interface IMainWindowView : IView {}

public class MainForm : Form, IMainWindowView
{
    public MainForm( IWindowController windowController )
    {
    }
}

Мой класс Window Controller зависит от фабрики представлений, которая будет создавать экземпляр зарегистрированного представления (используя контейнер).

ViewFactory использует контейнер IOC для создания переходных представлений и внедряет экземпляр контроллера в конструктор.

У него также есть такие методы, как ShowWindow и CloseWindow, которые будут отображать и скрывать форму. Это позволяет мне тестировать мои контроллеры с помощью фиктивных представлений. Он также удаляет любую зависимость от Windows Forms из моего контроллера и кода модели, что позволяет мне в будущем заменить любые представления представлениями WPF.

Я установил, что логика моего основного приложения, интерфейсы представления, контроллеры и модели находятся внутри одной главной сборки, а другая сборка содержит только формы и элементы управления Windows Forms.

0 голосов
/ 26 января 2009

Я могу объявить переменные формы в контроллере. Ничего общего с видом. Это System.Windows.Forms. Когда EXE запускается, он подключается к контроллеру (Program.cs). Там конкретные формы могут быть созданы и затем назначены свойствам формы на контроллере. Это позволяет отделить контроллер.

0 голосов
/ 26 января 2009

Вы можете использовать шаблон Subject-Observer между представлением и моделью, чтобы отделить взаимодействие между представлением и моделью. Далее вы можете использовать шаблон MVP.

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