如何集成ASP .Net模型视图演示者(MVP)模式和标记为[WebMethod]的静态页面方法?
在asp.net应用程序中,我想将Webclient Software Factory(WCSF)及其关联的Model View Presenter模式(MVP)的使用与Page Method结合在一起,后者是.aspx View上标记为静态的静态方法。 [WebMethod]属性。
但是,aspx页面上的静态方法似乎破坏了Model View Presenter模式,因为页面上需要实例方法来具有与View进行对话所必需的Presenter和Controller的上下文。
如何在WCSF中扩展asp .net的MVP模式以支持页面上的[WebMethods],又称为View?
解决方案
我认为我们可以通过使用ASP.Net AJAX Web服务而不是静态页面方法来接近所需的内容。该Web服务的优点是不是静态的,并且取决于我们视图的实现方式(我不熟悉WCSF MVP模式的细节),我们可能会将Web服务设置为"视图"层。至少有些相当接近的东西。
我在一个正在进行的项目中做了类似的事情。我最终需要创建一个仅用于数据的瘦类,该类通过Web服务被序列化为JSON,以将数据从模型传递到"视图",但是Web服务具有与事件中公开的方法基本相同的方法。风景。
我喜欢这种方法的一件事是,包括Web服务在内的所有位都是可测试的。
最近,在做一个MVP模式的项目并且想要大量的AJAX集成时,我遇到了类似的问题。最好拥有符合我们所调用的MVP模式的Web服务。
请记住,PageMethod只是Web服务,仅在当前页面中。它无权访问任何页面级对象,因此拥有它的好处是很少的。实际上,我认为它们是不利的,它们使开发人员(不熟悉该概念)能够与页面级对象进行交互。
硬币的另一面是PageMethod所做的事情,如果页面方法不需要与Model交互(例如,它正在处理复杂的算术计算,在C#/ VB.NET中比JS更快),则操作是实际上,它是一个UI级别的操作,如果要将应用程序转换为WinForm(或者其他方式),则很可能是无关紧要的。
请记住,在UI级别上与数据的所有交互都是特定于该UI实现的。如果我们要为演示者编写一个不同的UI,那么我们将可能具有不同的UI级别数据交互。