Как интегрировать шаблон ASP .Net Model View Presenter (MVP) и методы статической страницы, помеченные как [WebMethod]?
В приложении asp.net я хотел бы объединить использование фабрики программного обеспечения Webclient (WCSF) и связанной с ней модели представления представления модели (MVP) с методом Page Method, то есть статическими методами в представлениях ASPX, помеченных Атрибут [WebMethod].
Однако статические методы на странице aspx, по-видимому, нарушают шаблон Presenter Model Viewer, поскольку на странице требуется метод экземпляра, чтобы иметь контекст Presenter и Controller, необходимый для просмотра View.
Как можно расширить шаблон MVP asp.net в WCSF для поддержки [WebMethods] на странице, иначе говоря, View?
2 ответа
Недавно у меня была похожая проблема, когда я работал над паттерном MVP-проектом и хотел много интегрировать с AJAX. Вам лучше всего иметь веб-сервисы, которые соответствуют шаблону MVP, который вы вызываете.
Имейте в виду, что PageMethod - это чуть больше, чем веб-сервис, только на текущей странице. Он не имеет доступа к объектам уровня страницы, поэтому преимущества его наличия минимальны. Я действительно думаю, что они невыгодны, они дают разработчикам (которые не знакомы с концепцией) идею, что они могут взаимодействовать с объектами уровня страницы.
Обратная сторона медали - это то, что делает ваш PageMethod, если ваш метод страницы не нуждается во взаимодействии с моделью (скажем, он обрабатывает сложные арифметические вычисления, которые быстрее в C#/VB.NET, чем в JS), тогда операция на самом деле операция на уровне пользовательского интерфейса, и, скорее всего, не имеет значения, если вы хотите превратить приложение в WinForm (или что-то еще).
Имейте в виду, что все взаимодействие с данными на уровне пользовательского интерфейса является специфическим для этой реализации пользовательского интерфейса. Если бы вы написали другой интерфейс для докладчиков, скорее всего, у вас будет другое взаимодействие с данными на уровне интерфейса.
Я думаю, что вы могли бы приблизиться к тому, что вы ищете, используя веб-сервис AJAX ASP.Net вместо статических методов страницы. Преимущество веб-службы заключается в том, что он не статичен, и в зависимости от того, как реализованы ваши представления (я не знаком со спецификой шаблона WCSF MVP), вы можете сделать веб-службу своим слоем "Вид"... или по крайней мере, что-то довольно близко.
Я сделал нечто подобное в проекте, над которым я работаю. В итоге мне понадобилось создать тонкий класс только для данных, который сериализовался в JSON веб-службой для переноса данных из модели в "представление", но у веб-службы были, по сути, те же методы, которые будут отображаться в виде событий на вид.
Одна из вещей, которые мне понравились в этом подходе, состоит в том, что все биты, включая веб-сервис, являются тестируемыми.