MVC 3解决方案与两个视图/控制器/模型.(可能是MVC和MVP的混合体?)
本文关键字:MVC MVP 混合体 模型 解决方案 两个 视图 控制器 | 更新日期: 2023-09-27 18:10:59
我从MVC 3开始,并计划将模型和控制器分离到自己的单独项目中。我将遵循这篇文章的建议:
asp.net MVC将控制器放到一个单独的项目中
将它们分离到单独的项目中的目的是,有可能我必须将web服务项目添加到解决方案中,并且我希望它重用由控制器项目公开的相同功能。因此,解决方案将由两个视图项目(WebServices和WebSite)、控制器项目和模型项目组成。
我想知道如果这是可能的,如果这是一个常见的情况与MVC。
更新1:
我同意你的建议,并认为最好保持视图和控制器在一起。是否有可能有MVC和MVP的混合?我有一种感觉,我在这里真的做得太多了,所以请告诉我你的想法。
所以我要写:
1 -带有控制器的Web项目。
2 . WebServices项目
3 -演示器/接口。
4 -模型。
控制器将成为MVP模型中的视图。而且,每个web服务都将成为MVP模型中的一个视图。
例如,我们可以有如下,接口,演示器,控制器。
public interface ICustomers {
string[] Customers{set;}
}
public class CustomerPresenter {
ICustomers view = null;
public CustomerPresenter(ICustomers view) {
this.view = view;
}
public void GetCustomers() {
view.Customers = new string[]{"Customer1","Customer2"};
}
}
public class CustomerController:ICustomers {
CustomerPresenter presenter = null;
public CustomerController() {
presenter = new CustomerPresenter(this);
}
private string[] customers = null;
public string[] Customers {
set { throw new NotImplementedException(); }
}
public void GetCustomers() {
presenter.GetCustomers();
//Return view.
}
}
WebService将是MVP模型中的一个视图。
public class CustomerWebService:ICustomers {
CustomerPresenter presenter = null;
public CustomerController() {
presenter = new CustomerPresenter(this);
}
[WebMethod]
public void GetCustomers() {
presenter.GetCustomers();
//Return response.
}
我的项目是专门为您所述的原因而构建的,您想实现web服务。我不建议分离控制器,因为这是web项目的实际组成部分。你真正需要的是3-4个不同的项目。
- 存储库/数据层(可能包含您的域级模型)
- 域层(可选)
- 服务层。(现在这是你可以很容易地指向你的web服务,你所有的可重用逻辑应该在这里,而不是在控制器)
- Web层。(包含视图模型,视图和控制器)
我将它们分级。基本上,存储库、域和服务层是完全解耦的,这意味着您可以在没有服务器或asp.net的情况下使用这些库。wpf应用程序可以直接调用服务层,因为web层只是用于表示目的。
我不确定在自己的项目中分离视图和控制器是否常见。可能是吧,但我还没亲眼见过。
我最初分割它的方式是:
- 视图和控制器的一个项目 一个模型项目
如果和当你需要支持不同的视图,你可以更新你的控制器返回不同的东西取决于请求的类型。控制器为不同的客户端返回不同的东西是很常见的(例如HTML vs JSON)