虽然我的问题看似抽象,但我希望不是。假设我开发了一个应用程序,一个ASP.NET MVC站点,后来我的任务是为这个应用程序构建一个Winforms客户端,以及如何从现有应用程序中重用它?
我定义了模型,我定义了控制器和视图。它们都运作良好。
现在老板要求Winforms客户端,我希望我可以重用模型和控制器(假设我把它们放在不同的程序集中)而不是只重用视图(ASPX视图)。
可以这样做吗?怎么样?
答案 0 :(得分:10)
我以前做过这个,不是使用asp.net MVC,而是使用纯asp.net网页表单。我使用了自行开发的MVP(模型 - 视图 - 展示器)模式,并且允许在WinForms应用程序中使用Presenter(在您的情况下为== Controller)的绝对最重要的事情是不引用任何< / em>与system.web有关。
因此,您需要做的第一件事是引入接口以包装任何请求,响应,Web等内容,并让每个Presenter通过依赖注入接受这些接口(或通过其他技术将它们提供给Presenters ),然后如果Presenter使用那些而不是实际的system.web东西。
示例:
想象一下,您想要将控制权从页面A转移到页面B(在您的winforms应用程序中,您可能希望关闭表单A然后打开表单B)。
接口:
public interface IRuntimeContext
{
void TransferTo(string destination);
}
网络实施:
public class AspNetRuntimeContext
{
public void TransferTo(string destination)
{
Response.Redirect(destination);
}
}
winforms实施:
public class WinformsRuntimeContext
{
public void TransferTo(string destination)
{
var r = GetFormByName(destination);
r.Show();
}
}
现在是演示者(在你的情况下是控制器):
public class SomePresenter
{
private readonly runtimeContext;
public SomePresenter(IRuntimeContext runtimeContext)
{
this.runtimeContext = runtimeContext;
}
public void SomeAction()
{
// do some work
// then transfer control to another page/form
runtimeContext.TransferTo("somewhereElse");
}
}
我没有详细研究过asp.net MVC实现,但我希望这能为你提供一些指示,说明你可能需要做很多工作才能实现你所追求的场景。
您可能希望考虑接受必须为不同平台重新编写View和Controller的代码,而是集中精力保持控制器非常薄,并将大部分代码放在可以使用的服务层中。共享。
祝你好运!
答案 1 :(得分:2)
看一下Northwind starter kit(不要被Northwind位推迟) - 它有各种GUI附加到分层架构,包括MVC和Winforms。
它完全符合您的要求。