Page Controller模式与Front Controller模式

Page Controller模式
使用Page Controller模式时,要由名为BaseController的一个中心类来实现需要的所有公共行为,以便处理HTTP请求、更新模型以及将请求转发给恰当的视图。BaseController提供的通用功能包括会话管理、安全性以及从查询字符串或隐藏字段中检索数据。
针对Web应用程序中的每个链接,你都需要创建一个独立的PageController类,该类要从BaseController类继承。这些独立的PageController负责实现网页特有的任何行为,并直接使用已由BaseController实现的核心功能。
许多时候,你的应用程序可以分解成一系列公共网页类型,它们共享通用的逻辑。例如,你可能有一系列数据输入页或者网格视图页,它们全部共享相同的逻辑。在这种情况下,最好实现一个DataEntryController或者一个GridViewController,并要求它们从BaseController类继承。基于这些派生类,你可实现自己PageController,并使用现成的公共方法。但要注意的是,继承层次不能太复杂,否则应用程序逻辑会变得难以维护。为了尽量缩短继承链,你可创建一系列“助手类”,它们含有一系列公共代码,可在任何一个继承级别上调用。
为了实现Page Controller模式,你可从System.Web.UI.Page继承一个BaseController类,然后实现通用的应用程序功能。例如,BaseController可提供页眉、页脚和一些用户特有的信息(例如登录名称和部门等),从而实现一致的外观与感觉。接着可从这个BaseController类继承,并由继承的类(放在代码隐藏文件中)来实现网页所特有的逻辑,从而创建应用程序需要的每一个页。
对于中等复杂程度的应用程序,如果它具有固定的导航路径,就尤其适合采用这一模式。相反,如果需要动态导航能力,则需要采用Front Controller模式.

Front Controller模式
如果需要在多个网页之间进行合作式的处理,Page Controller模式的效率会大大降低,因为它要求为每个逻辑性上的网页都重新实现一个对象。
在这种情况下,Front Controller模式显得更有效,因为它用一个控制器来接收所有请求,然后通过一个处理程序和命令类的一个层次结构来引导请求。处理程序从HTTP请求中获取参数,选择正确的命令并执行之。每个命令对象都执行了指定的操作后,它判断需要用哪个视图来正确地呈现网页。通过实现Front Controller,可获得更集中的应用程序控制,因为所有网页请求都通过单独一个控制器,而非由不同的Page Controller进行处理。但这样做也不是没有代价的:如果处理程序进行一些高开销的处理,比如进行数据库查找,就可能导致整个应用程序的运行速度变慢。所以,处理程序应尽可能高效,而且只有在绝对必要时才使用外部资源。
还应考虑对任何外部资源进行缓存,以提高处理程序的性能。 为了实现FrontController类,你需要创建一个Handler(处理程序)和一个CommandFactory,后者用于确定为了响应一个请求而需要执行的命令。ASP.NET提供了IHttpHandler接口,它允许开发者创建为传入的HTTP请求提供服务所需的自定义接口。为了实现Handler,你需要从System.Web.IHttpHandler继承,并添加相应的逻辑,以便从CommandFactory中实例化和调用恰当的命令。CommandFactory定义了一个命令集合,以及用于判断应该执行什么命令的逻辑。调用CommandFactory会返回恰当的Command对象,而Handler可调用该对象的Execute方法。采用这种模式,你可扩展CommandFactory逻辑,并创建附加的命令来处理不同的实际情况,从而创建出更可靠的导航机制,并集中地实现它们。 结构化模式 .NET结构师应尽可能地使用结构化模式。使用ASP.NET内建的特性,很容易就能实现Page Controller和Front Controller这样的模式。利用它们可获得具有高度重用性和扩展性的应用程序设计。
对于这些模式以及其他结构化模式,要了解它们的更多信息以及ASP.NET实现的细节,请访问 Microsoft .NET Architecture Center

转载于:https://www.cnblogs.com/applegreen/archive/2005/02/24/108714.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Page Factory是Selenium WebDriver的一个扩展,它提供了一种用于管理页面对象的工厂模式。在测试过程中,我们需要与页面交互,这意味着我们需要操作页面上的各种元素(如文本框、按钮、下拉列表等)。为了使测试代码更可维护、可读性更好,我们可以使用Page Factory来管理页面对象。 Page Factory使用注解的方式来初始化页面对象,这些对象可以直接通过测试类的成员变量访问。这使得代码更加简洁、易于维护。 下面是一个示例: ```java public class LoginPage { @FindBy(id = "username") private WebElement usernameInput; @FindBy(id = "password") private WebElement passwordInput; @FindBy(id = "loginButton") private WebElement loginButton; public void login(String username, String password) { usernameInput.sendKeys(username); passwordInput.sendKeys(password); loginButton.click(); } } ``` 在上面的代码中,我们使用了`@FindBy`注解来初始化页面元素对象。这些对象可以直接通过类的成员变量来访问。 在测试代码中,我们可以像下面这样使用LoginPage: ```java public class LoginTest { private WebDriver driver; private LoginPage loginPage; @BeforeTest public void setup() { driver = new ChromeDriver(); loginPage = PageFactory.initElements(driver, LoginPage.class); } @Test public void testLogin() { loginPage.login("username", "password"); } @AfterTest public void teardown() { driver.quit(); } } ``` 在上面的测试代码中,我们使用了`PageFactory.initElements`方法来初始化LoginPage对象。这个方法会自动查找LoginPage中使用`@FindBy`注解的成员变量,并将它们初始化为页面元素对象。 使用Page Factory可以使测试代码更加简洁、易于维护。它提供了一个优雅的方式来管理页面对象。如果你使用Selenium WebDriver进行自动化测试,建议你尝试使用Page Factory。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值