C# 具有两个视图/控制器/模型的MVC 3解决方案。(可能是MVC、MVP混合动力?)

C# 具有两个视图/控制器/模型的MVC 3解决方案。(可能是MVC、MVP混合动力?),c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我从MVC3开始,计划将模型和控制器分离到各自独立的项目中。我将按照这篇文章的建议来做: 将它们分离为单独的项目的目的是,我可能必须向解决方案中添加一个web服务项目,并且我希望它能够重用controller项目公开的相同功能。因此,解决方案将由两个视图项目组成,即WebServices和Web、控制器项目和模型项目 我想知道这是否可行,以及这是否是MVC的常见场景 更新1: 根据您的建议,我同意,并认为最好将视图和控制器保持在一起 有可能混合MVC和MVP吗?我有一种感觉,我真的做得太过分了

我从MVC3开始,计划将模型和控制器分离到各自独立的项目中。我将按照这篇文章的建议来做:

将它们分离为单独的项目的目的是,我可能必须向解决方案中添加一个web服务项目,并且我希望它能够重用controller项目公开的相同功能。因此,解决方案将由两个视图项目组成,即WebServices和Web、控制器项目和模型项目

我想知道这是否可行,以及这是否是MVC的常见场景

更新1:

根据您的建议,我同意,并认为最好将视图和控制器保持在一起

有可能混合MVC和MVP吗?我有一种感觉,我真的做得太过分了,所以请让我知道你的想法

所以我会:
1–带控制器的Web项目。
2–Web服务项目
3–演示者/界面。
4–模型

控制器将成为MVP模型中的视图。此外,每个web服务都将成为MVP模型中的一个视图

    public class CustomerWebService:ICustomers {

    CustomerPresenter presenter = null;
    public CustomerController() {
        presenter = new CustomerPresenter(this);
    }

   [WebMethod]
    public void GetCustomers() { 
     presenter.GetCustomers(); 
    //Return response. 
} 
例如,我们可以有以下界面、演示者、控制器

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

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

我最初会将其拆分为:

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

如果需要支持不同的视图,可以根据请求的类型更新控制器以返回不同的内容。通常,控制器会为不同的客户端返回不同的内容(例如HTML与JSON)。

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

  • 存储库/数据层(可能包含域级模型)
  • 域层(可选)
  • 服务层。(现在,您可以非常轻松地将web服务指向这里,所有可重用逻辑都应该在这里,而不是在控制器中)
  • 网络层。(包含视图模型、视图和控制器)

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

    +1为共享逻辑引入服务层的概念。@Shawn,@Hector感谢您的回复,我已更新了我的问题。