Решение MVC 3 с двумя видами / контроллер / модель.(Возможен гибрид MVC, MVP?) - PullRequest
2 голосов
/ 12 октября 2011

Я начинаю с MVC 3 и планирую разделить модель и контроллеры на отдельные проекты.Я буду следовать предложениям из этого поста:

asp.net mvc помещает контроллеры в отдельный проект

Целью разделения их на отдельные проекты являетсячто есть вероятность, что мне, возможно, придется добавить проект веб-службы в решение, и я бы хотел, чтобы он использовал ту же функциональность, которую предоставляет проект контроллера.Таким образом, решение будет сформировано из двух проектов представлений, WebServices и WebSite, проекта контроллера и проекта модели.

Я хотел бы знать, возможно ли это и является ли это общим сценарием с MVC.

Обновление 1:

С вашими предложениями я согласен и считаю, что лучше всего сохранять вид и контроллеры вместе.

Можно ли было бы иметь гибрид MVC и MVP?У меня такое чувство, что я действительно переусердствовал, поэтому, пожалуйста, дайте мне знать, что вы думаете.

Итак, у меня будет:
1 - веб-проект с контроллерами.
2 - проект WebServices
3 - Ведущие / Интерфейсы.
4 - Модель.

Контроллеры станут представлениями в модели MVP.Также каждый веб-сервис станет представлением в модели 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. 
} 

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Мои проекты создаются специально по той причине, которую вы указали, вы хотите реализовать веб-сервис.Я бы не рекомендовал разделять контроллеры, потому что это актуальная часть веб-проекта.На самом деле вам нужно около 3-4 различных проектов.

  1. Репозиторий / слой данных (может содержать модели уровня вашего домена)
  2. Уровень домена (необязательно)
  3. Сервисный уровень.(Теперь здесь вы можете очень легко указать свой веб-сервис, вся ваша логика многократного использования должна быть здесь, а не в контроллере)
  4. Веб-слой.(Содержит модели видов, виды и контроллеры)

Я разместил их по уровням.По сути, хранилище, домен и сервисный уровень полностью разобщены, что означает, что вы можете использовать эти библиотеки без сервера или asp.net.Приложение wpf может просто вызывать сервисный уровень, потому что веб-слой предназначен только для презентаций.

1 голос
/ 12 октября 2011

Я не уверен, что принято разделять представления и контроллеры в их собственных проектах.Возможно, но я не видел его лично.

Первоначально я бы разделил его так:

  • Один проект для представлений и контроллеров
  • Один проектдля моделей

Если и когда вам необходимо поддерживать разные представления, вы можете обновить свой контроллер, чтобы он возвращал что-то другое в зависимости от типа запроса.Распространено иметь контроллеры, которые возвращают разные вещи для разных клиентов (например, HTML против JSON.)

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