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. 
} 

MVC 3解决方案与两个视图/控制器/模型.(可能是MVC和MVP的混合体?)

我的项目是专门为您所述的原因而构建的,您想实现web服务。我不建议分离控制器,因为这是web项目的实际组成部分。你真正需要的是3-4个不同的项目。

  1. 存储库/数据层(可能包含您的域级模型)
  2. 域层(可选)
  3. 服务层。(现在这是你可以很容易地指向你的web服务,你所有的可重用逻辑应该在这里,而不是在控制器)
  4. Web层。(包含视图模型,视图和控制器)

我将它们分级。基本上,存储库、域和服务层是完全解耦的,这意味着您可以在没有服务器或asp.net的情况下使用这些库。wpf应用程序可以直接调用服务层,因为web层只是用于表示目的。

我不确定在自己的项目中分离视图和控制器是否常见。可能是吧,但我还没亲眼见过。

我最初分割它的方式是:

  • 视图和控制器的一个项目
  • 一个模型项目

如果和当你需要支持不同的视图,你可以更新你的控制器返回不同的东西取决于请求的类型。控制器为不同的客户端返回不同的东西是很常见的(例如HTML vs JSON)