在asp.net应用程序中,我想结合使用Webclient软件工厂(WCSF)及其相关的模型视图展示器模式(MVP)和页面方法,这是.aspx视图上的静态方法标有[WebMethod]属性。
但是,aspx页面上的静态方法似乎会破坏Model View Presenter模式,因为页面上需要一个实例方法才能使View与之交互所需的Presenter和Controller上下文。
如何在WCSF中扩展asp .net的MVP模式以支持页面上的[WebMethods],又称View?
答案 0 :(得分:4)
最近我做了一个MVP patterened项目并想要大量的AJAX集成时遇到了类似的问题。您最好使用符合您调用的MVP模式的Web服务。
请记住,PageMethod只不过是一个Web服务,就在当前页面中。它无法访问任何页面级对象,因此使用它的优势很小。我实际上认为它们是不合理的,它们给开发人员(他们不熟悉这个概念)提供了他们可以与页面级对象进行交互的想法。
硬币的另一面是你的PageMethod正在做的事情,如果你的页面方法不需要与模型交互(比如,它处理复杂的算术计算,它在C#/ VB.NET中比JS更快)然后该操作实际上是一个UI级别的操作,如果你将应用程序变成一个WinForm(或其他东西),很可能是不可能的。
请记住,UI级别的所有数据交互都是针对该UI实现的。如果您要为演示者编写不同的UI,那么您可能会有不同的UI级别数据交互。
答案 1 :(得分:2)
我认为您可以通过使用ASP.Net AJAX Web服务而不是静态页面方法来接近您所寻找的内容。 Web服务的优势在于不是静态的,并且取决于您的视图的实现方式(我不熟悉WCSF MVP模式的细节),您可能会使Web服务成为“视图”层。或者至少相当接近的东西。
我在一个正在研究的项目中做了类似的事情。我最终需要创建一个瘦数据类,它由Web服务序列化为JSON,以将数据从模型传递到“视图”,但Web服务基本上具有相同的方法,可以作为事件公开观点。
我喜欢这种方法的一个方面是所有位,包括Web服务,都是可测试的。